看起来像docker服务发现只适用于用户定义的网络而不是默认桥接器(docker0),但我没有在文档中找到任何内容。
docker run --rm -d --name c1 alpine sleep 2h
docker run --rm -d --name c2 alpine sleep 2h
docker exec -ti c1 ping c2
它给了我ping: bad address 'c2'
但是,如果我创建一个自定义桥接网络一切正常:
qazxsw poi
qazxsw poi
docker network create u-bridge
docker run --rm -d --name u1 --net u-bridge alpine sleep 2h
它给了我:docker run --rm -d --name u2 --net u-bridge alpine sleep 2h
默认桥接网络不应该有服务发现吗?
默认网桥上的容器需要明确为docker exec -ti u1 ping u2
,这被视为遗留/弃用行为。
警告:
PING u2 (172.18.0.3): 56 data bytes (...)
标志是Docker的旧版功能。它最终可能被删除。除非您绝对需要继续使用它,否则我们建议您使用用户定义的网络来促进两个容器之间的通信,而不是使用linked。用户定义的网络不支持您使用--link
的一个功能是在容器之间共享环境变量。但是,您可以使用其他机制(如卷)以更可控的方式在容器之间共享环境变量。
正如您所演示的那样,应该使用用户定义的网络。
默认网桥和用户定义网络的DNS查找工作方式不同。
请参阅:--link