etcd docker: curl is work, golang failed for DeadlineExceeded

167 Views Asked by At

etcd docker deploy on my server. In my computer, curl is work. However, golang failed for DeadlineExceeded. Firewall-cmd strategy was set so that curl could work.

docker compose fire as below:

version: "3.5"
services:
  etcd:
    hostname: etcd
    image: bitnami/etcd:3
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    privileged: true
    volumes:
      - "/home/xxx/etcd/data:/opt/bitnami/etcd/data"
    environment:
      - "ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379"
      - "ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379"
      - "ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380"
      - "ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380"
      - "ALLOW_NONE_AUTHENTICATION=yes"
      - "ETCD_INITIAL_CLUSTER=node1=http://0.0.0.0:2380"
      - "ETCD_NAME=node1"
      - "ETCD_DATA_DIR=/opt/bitnami/etcd/data"
    ports:
      - 2379:2379
      - 2380:2380
    networks:
      - etcdnet

networks:
  etcdnet:
    name: etcdnet

I use curl command as below:

curl http://my-server-ip:2379/v3/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'

and golang code as below:

cli, err := clientv3.New(clientv3.Config{
    Endpoints:   []string{"my-server-ip:2379"},
    DialTimeout: 5 * time.Second,
})
if err != nil {
    log.Fatal(err)
} else {
    log.Println("successfully connect etcd")
}
defer cli.Close()

ctx, cancel := context.WithTimeout(context.Background(), time.Second*20)
_, err = cli.Put(ctx, "sample_key", "sample_value")
statusRes, err := cli.Status(context.Background(), "my-server-ip:2379") // Waits here indefinitely
if err != nil {
    log.Fatal(err)
    log.Fatal(statusRes)
}
defer cancel()
if err != nil {
    log.Fatal(err)
}

This code return error:

rpc error: code = DeadlineExceeded desc = latest balancer error: last connection error: connection error: desc = "error reading server preface: EOF"

I've set up firewall policies and even turned off the firewall, but it all works for curl, not golang.

0

There are 0 best solutions below