docker+etcd 无法远程访问?
version: "3"
services:
etcd:
container_name: etcd-standalone-etcd
image: quay.io/coreos/etcd:v3.5.0
ports:
- "2379:2379"
etcd-browser:
container_name: etcd-standalone-etcdv3-browser
image: rustyx/etcdv3-browser:latest
ports:
- "8804:8081"
environment:
- ETCD=etcd:2379
- EDITABLE=1
depends_on:
- etcd
拉了一个 etcd
发现一个问题,在宿主机以 127.0.0.1 ,可以直接访问
╰─➤ nc -zv 127.0.0.1 2379
Connection to 127.0.0.1 2379 port [tcp/*] succeeded!
宿主机的 ip 是 192.168.2.15
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 08:bf:b8:3f:b6:f9 brd ff:ff:ff:ff:ff:ff
altname enp6s0
inet 192.168.2.15/25 brd 192.168.2.127 scope global noprefixroute eno1
valid_lft forever preferred_lft forever
inet6 fe80::1958:af81:7fc8:edfb/64 scope link noprefixroute
valid_lft forever preferred_lft forever
但是无法在宿主机上用 192.168.2.15 访问
╰─➤ nc -zv 192.168.2.15 2379
nc: connect to 192.168.2.15 port 2379 (tcp) failed: Connection refused
不理解
端口是确实被监听着的
╰─➤ lsof -i:2379
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 1978883 root 4u IPv4 215957244 0t0 TCP *:2379 (LISTEN)
docker-pr 1978893 root 4u IPv6 216099355 0t0 TCP *:2379 (LISTEN)
看日志,也没毛病
─➤ docker logs --tail=300 etcd-standalone-etcd
{"level":"info","ts":"2023-08-31T03:56:21.141Z","caller":"etcdmain/etcd.go:72","msg":"Running: ","args":["/usr/local/bin/etcd"]}
{"level":"warn","ts":"2023-08-31T03:56:21.141Z","caller":"etcdmain/etcd.go:104","msg":"'data-dir' was empty; using default","data-dir":"default.etcd"}
{"level":"info","ts":"2023-08-31T03:56:21.141Z","caller":"embed/etcd.go:131","msg":"configuring peer listeners","listen-peer-urls":["http://localhost:2380"]}
{"level":"info","ts":"2023-08-31T03:56:21.141Z","caller":"embed/etcd.go:139","msg":"configuring client listeners","listen-client-urls":["http://localhost:2379"]}
{"level":"info","ts":"2023-08-31T03:56:21.141Z","caller":"embed/etcd.go:307","msg":"starting an etcd server","etcd-version":"3.5.0","git-sha":"946a5a6f2","go-version":"go1.16.3","go-os":"linux","go-arch":"amd64","max-cpu-set":24,"max-cpu-available":24,"member-initialized":false,"name":"default","data-dir":"default.etcd","wal-dir":"","wal-dir-dedicated":"","member-dir":"default.etcd/member","force-new-cluster":false,"heartbeat-interval":"100ms","election-timeout":"1s","initial-election-tick-advance":true,"snapshot-count":100000,"snapshot-catchup-entries":5000,"initial-advertise-peer-urls":["http://localhost:2380"],"listen-peer-urls":["http://localhost:2380"],"advertise-client-urls":["http://localhost:2379"],"listen-client-urls":["http://localhost:2379"],"listen-metrics-urls":[],"cors":["*"],"host-whitelist":["*"],"initial-cluster":"default=http://localhost:2380","initial-cluster-state":"new","initial-cluster-token":"etcd-cluster","quota-size-bytes":2147483648,"pre-vote":true,"initial-corrupt-check":false,"corrupt-check-time-interval":"0s","auto-compaction-mode":"periodic","auto-compaction-retention":"0s","auto-compaction-interval":"0s","discovery-url":"","discovery-proxy":"","downgrade-check-interval":"5s"}
{"level":"info","ts":"2023-08-31T03:56:21.146Z","caller":"etcdserver/backend.go:81","msg":"opened backend db","path":"default.etcd/member/snap/db","took":"5.122239ms"}
{"level":"info","ts":"2023-08-31T03:56:21.161Z","caller":"etcdserver/raft.go:448","msg":"starting local member","local-member-id":"8e9e05c52164694d","cluster-id":"cdf818194e3a8c32"}
{"level":"info","ts":"2023-08-31T03:56:21.161Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"8e9e05c52164694d switched to configuration voters=()"}
{"level":"info","ts":"2023-08-31T03:56:21.161Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"8e9e05c52164694d became follower at term 0"}
{"level":"info","ts":"2023-08-31T03:56:21.161Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"newRaft 8e9e05c52164694d [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]"}
{"level":"info","ts":"2023-08-31T03:56:21.161Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"8e9e05c52164694d became follower at term 1"}
{"level":"info","ts":"2023-08-31T03:56:21.161Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"8e9e05c52164694d switched to configuration voters=(10276657743932975437)"}
{"level":"warn","ts":"2023-08-31T03:56:21.172Z","caller":"auth/store.go:1220","msg":"simple token is not cryptographically signed"}
{"level":"info","ts":"2023-08-31T03:56:21.178Z","caller":"mvcc/kvstore.go:415","msg":"kvstore restored","current-rev":1}
{"level":"info","ts":"2023-08-31T03:56:21.183Z","caller":"etcdserver/quota.go:94","msg":"enabled backend quota with default value","quota-name":"v3-applier","quota-size-bytes":2147483648,"quota-size":"2.1 GB"}
{"level":"info","ts":"2023-08-31T03:56:21.189Z","caller":"etcdserver/server.go:843","msg":"starting etcd server","local-member-id":"8e9e05c52164694d","local-server-version":"3.5.0","cluster-version":"to_be_decided"}
{"level":"info","ts":"2023-08-31T03:56:21.189Z","caller":"etcdserver/server.go:728","msg":"started as single-node; fast-forwarding election ticks","local-member-id":"8e9e05c52164694d","forward-ticks":9,"forward-duration":"900ms","election-ticks":10,"election-timeout":"1s"}
{"level":"info","ts":"2023-08-31T03:56:21.190Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"8e9e05c52164694d switched to configuration voters=(10276657743932975437)"}
{"level":"info","ts":"2023-08-31T03:56:21.190Z","caller":"membership/cluster.go:393","msg":"added member","cluster-id":"cdf818194e3a8c32","local-member-id":"8e9e05c52164694d","added-peer-id":"8e9e05c52164694d","added-peer-peer-urls":["http://localhost:2380"]}
{"level":"info","ts":"2023-08-31T03:56:21.190Z","caller":"embed/etcd.go:276","msg":"now serving peer/client/metrics","local-member-id":"8e9e05c52164694d","initial-advertise-peer-urls":["http://localhost:2380"],"listen-peer-urls":["http://localhost:2380"],"advertise-client-urls":["http://localhost:2379"],"listen-client-urls":["http://localhost:2379"],"listen-metrics-urls":[]}
{"level":"info","ts":"2023-08-31T03:56:21.190Z","caller":"embed/etcd.go:580","msg":"serving peer traffic","address":"127.0.0.1:2380"}
{"level":"info","ts":"2023-08-31T03:56:21.190Z","caller":"embed/etcd.go:552","msg":"cmux::serve","address":"127.0.0.1:2380"}
{"level":"info","ts":"2023-08-31T03:56:22.061Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"8e9e05c52164694d is starting a new election at term 1"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"8e9e05c52164694d became pre-candidate at term 1"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"8e9e05c52164694d received MsgPreVoteResp from 8e9e05c52164694d at term 1"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"8e9e05c52164694d became candidate at term 2"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"8e9e05c52164694d received MsgVoteResp from 8e9e05c52164694d at term 2"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"8e9e05c52164694d became leader at term 2"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"raft.node: 8e9e05c52164694d elected leader 8e9e05c52164694d at term 2"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","caller":"etcdserver/server.go:2476","msg":"setting up initial cluster version using v2 API","cluster-version":"3.5"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","caller":"etcdserver/server.go:2027","msg":"published local member to cluster through raft","local-member-id":"8e9e05c52164694d","local-member-attributes":"{Name:default ClientURLs:[http://localhost:2379]}","request-path":"/0/members/8e9e05c52164694d/attributes","cluster-id":"cdf818194e3a8c32","publish-timeout":"7s"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","caller":"embed/serve.go:98","msg":"ready to serve client requests"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","caller":"etcdmain/main.go:47","msg":"notifying init daemon"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","caller":"etcdmain/main.go:53","msg":"successfully notified init daemon"}
{"level":"info","ts":"2023-08-31T03:56:22.062Z","caller":"embed/serve.go:140","msg":"serving client traffic insecurely; this is strongly discouraged!","address":"127.0.0.1:2379"}
{"level":"info","ts":"2023-08-31T03:56:22.064Z","caller":"membership/cluster.go:531","msg":"set initial cluster version","cluster-id":"cdf818194e3a8c32","local-member-id":"8e9e05c52164694d","cluster-version":"3.5"}
{"level":"info","ts":"2023-08-31T03:56:22.064Z","caller":"api/capability.go:75","msg":"enabled capabilities for version","cluster-version":"3.5"}
{"level":"info","ts":"2023-08-31T03:56:22.064Z","caller":"etcdserver/server.go:2500","msg":"cluster version is updated","cluster-version":"3.5"}
但是通过同样访问起的 mysql8 ,一切正常
╰─➤ cat docker-compose.yaml
version: "3"
services:
# mysqld-exporter:
# container_name: mysqld-exporter
# image: prom/mysqld-exporter
# environment:
# DATA_SOURCE_NAME: root:123456@(192.168.26.174:3306)/
# ports:
# - "9104:9104"
mysql8:
container_name: mysql8
image: mysql:8
restart: always
ports:
- "3307:3306"
environment:
- MYSQL_ROOT_PASSWORD=wph8xbT8UeQtyVq
volumes:
- ./volumes/:/var/lib/mysql
mysql8 就一点毛病没有
╰─➤ nc -zv 192.168.2.15 3307
Connection to 192.168.2.15 3307 port [tcp/*] succeeded!
修改成下面这样直接报错
version: "3"
services:
etcd:
container_name: etcd-standalone-etcd
image: quay.io/coreos/etcd:v3.5.0
command:
- "--listen-client-urls=http://0.0.0.0:2379"
- "--advertise-client-urls=http://0.0.0.0:2379"
ports:
- "2379:2379"
etcd-browser:
container_name: etcd-standalone-etcdv3-browser
image: rustyx/etcdv3-browser:latest
ports:
- "8804:8081"
environment:
- ETCD=etcd:2379
- EDITABLE=1
depends_on:
- etcd
╰─➤ docker-compose up -d
Recreating etcd-standalone-etcd ... error
ERROR: for etcd-standalone-etcd Cannot start service etcd: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "--listen-client-urls=http://0.0.0.0:2379": stat --listen-client-urls=http://0.0.0.0:2379: no such file or directory: unknown
ERROR: for etcd Cannot start service etcd: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "--listen-client-urls=http://0.0.0.0:2379": stat --listen-client-urls=http://0.0.0.0:2379: no such file or directory: unknown
ERROR: Encountered errors while bringing up the project.
回复
1个回答
test
2024-06-28
参考了 milvus 对 etcd 的配置,我发现是可以了
参考: https://github.com/milvus-io/milvus/blob/master/deployments/docker/standalone/docker-compose.yml
version: "3"
services:
etcd:
container_name: etcd-standalone-etcd
image: quay.io/coreos/etcd:v3.5.0
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
ports:
- "2379:2379"
etcd-browser:
container_name: etcd-standalone-etcdv3-browser
image: rustyx/etcdv3-browser:latest
ports:
- "8804:8081"
environment:
- ETCD=etcd:2379
- EDITABLE=1
depends_on:
- etcd
可以看到端口已经通了
╰─➤ nc -zv 192.168.2.15 2379
Connection to 192.168.2.15 2379 port [tcp/*] succeeded!
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容