Kri*_*per 2 networking docker etcd
我试图从正在运行的Docker容器中访问etcd.我跑的时候
curl http://172.17.42.1:4001/v2/keys
Run Code Online (Sandbox Code Playgroud)
我明白了
curl: (7) Failed to connect to 172.17.42.1 port 4001: Connection refused
Run Code Online (Sandbox Code Playgroud)
我有四个其他主机,这可以正常工作,但这台机器上的每个容器都有这个问题.我真的不知道发生了什么,我不知道如何调试它.
我的etcd环境变量是
ETCD_ADVERTISE_CLIENT_URLS=http://10.242.10.2:2379
ETCD_DISCOVERY=https://discovery.etcd.io/<token_removed>
ETCD_INITIAL_ADVERTISE_PEER_URLS=http://10.242.10.2:2380
ETCD_LISTEN_CLIENT_URLS=http://10.242.10.2:2379,http://127.0.0.1:2379,http://0.0.0.0:4001
ETCD_LISTEN_PEER_URLS=http://10.242.10.2:2380
Run Code Online (Sandbox Code Playgroud)
我也可以从主机访问etcd
curl http://localhost:4001/v2/keys
Run Code Online (Sandbox Code Playgroud)
因此,从容器路由到主机时似乎有一些错误.但我无法弄清楚它是什么.谁能指出我正确的方向?
我发现我必须使用--advertise-client-urls和--listen-client-urls.像这样:
./etcd --advertise-client-urls 'http://0.0.0.0:2379,http://0.0.0.0:4001' --listen-client-urls 'http://0.0.0.0:2379,http://0.0.0.0:4001'
Run Code Online (Sandbox Code Playgroud)
然后我就能成功地做到了
curl -L http://hostname:2379/version
Run Code Online (Sandbox Code Playgroud)
从任何可以到达该服务器的机器,它工作.
事实证明,etcd 仅localhost:4001在该机器上监听,这就是为什么我无法从容器内访问它。尽管我将监听客户端 URL 之一配置为0.0.0.0:4001.
事实证明我已经运行了sudo systemctl enable etcd2,这导致它在 cloud-config 服务运行之前运行。因此,etcd 以默认配置启动,而不是我在云配置中指定的配置。运行sudo systemctl disable etcd2解决了这个问题。
| 归档时间: |
|
| 查看次数: |
5291 次 |
| 最近记录: |