一尘不染

如何在容器之间创建双向链接?

docker

我必须链接两个容器,以便它们可以互相看到。当然以下…

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

创建双向链接的最简单方法是什么?


阅读 276

收藏
2020-06-17

共1个答案

一尘不染

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
2020-06-17