看起来像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'
但是,如果我创建一个自定义网桥,那么everthing工作正常:
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 (...)
默认桥接网络不应该有服务发现吗?
答案 0 :(得分:3)
默认网桥上的容器需要明确linked,这被视为遗留/弃用行为。
警告:
--link
标志是Docker不推荐使用的旧功能。有可能 最终被删除。除非你绝对需要继续使用 它,我们建议您使用用户定义的网络来方便 两个容器之间的通信,而不是使用--link
。一 用户定义的网络不支持您可以使用的功能--link
正在容器之间共享环境变量。但是,您可以使用其他机制(如卷)来共享环境 容器之间的变量以更加可控的方式。
正如您所演示的那样,应该使用用户定义的网络。
答案 1 :(得分:1)
默认网桥和用户定义网络的DNS查找工作方式不同。
请参阅:https://docs.docker.com/engine/userguide/networking/configure-dns/