我必须链接两个容器,以便它们可以互相看到。当然以下…
docker run -i -t --name container1 --link container2:container2 ubuntu:trusty /bin/bash docker run -i -t --name container2 --link container1:container1 ubuntu:trusty /bin/bash
…在第1行失败,因为容器需要启动并运行才能成为链接目标:
2014/08/15 03:20:27 Error response from daemon: Could not find entity for container2
创建双向链接的最简单方法是什么?
Docker 1.10通过引入高级容器网络很好地解决了这一问题。(详细信息:https : //docs.docker.com/engine/userguide/networking/dockernetworks/)
首先,创建一个网络。下面的示例创建一个基本的“桥接”网络,该网络仅在一台主机上工作。您可以查看Docker的更完整的文档,以使用覆盖网络在主机之间执行此操作。
docker network create my-fancy-network
现在,1.10中的Docker网络在容器内部创建了一种特殊的DNS解析,可以以特殊的方式解析名称。首先,您可以继续使用– link,但是正如您所指出的那样,您的示例无效。我建议在docker运行命令中使用–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
并从container1
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