Docker 1.10 通过引入高级容器网络很好地解决了这个问题。
(详情:https://docs.docker.com/engine/userguide/networking/dockernetworks/)
首先,创建一个网络。下面的示例创建了一个基本的“桥接”网络,该网络仅适用于一台主机。您可以查看 docker 更完整的文档,以使用覆盖网络跨主机执行此操作。
docker network create my-fancy-network
1.10 中的 Docker 网络现在在容器内创建一个特殊的 DNS 解析,可以以特殊方式解析名称。首先,您可以继续使用 --link,但正如您所指出的那样,您的示例不起作用。我建议在 docker run 命令中使用 --net-alias=:
docker run -i -t --name container1 --net=my-fancy-network --net-alias=container1 ubuntu:trusty /bin/bash
docker run -i -t --name container2 --net=my-fancy-network --net-alias=container2 ubuntu:trusty /bin/bash
请注意,使用 --name container2 设置容器名称,这也会创建一个 DNS 条目,而 --net-alias=container2 只是在网络上创建一个 DNS 条目,因此在这个特定示例中,您可以省略 --net -alias 但我把它留在那里以防你想重命名你的容器并且仍然有一个与你的容器名称不匹配的 DNS 别名。
(详情请看:https://docs.docker.com/engine/userguide/networking/configure-dns/)
你来了:
root@4dff6c762785:/# ping container1
PING container1 (172.19.0.2) 56(84) bytes of data.
64 bytes from container1.my-fancy-network (172.19.0.2): icmp_seq=1 ttl=64 time=0.101 ms
64 bytes from container1.my-fancy-network (172.19.0.2): icmp_seq=2 ttl=64 time=0.074 ms
64 bytes from container1.my-fancy-network (172.19.0.2): icmp_seq=3 ttl=64 time=0.072 ms
从容器1
root@4f16381fca06:/# ping container2
PING container2 (172.19.0.3) 56(84) bytes of data.
64 bytes from container2.my-fancy-network (172.19.0.3): icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from container2.my-fancy-network (172.19.0.3): icmp_seq=2 ttl=64 time=0.069 ms
64 bytes from container2.my-fancy-network (172.19.0.3): icmp_seq=3 ttl=64 time=0.062 ms