让两个容器连接到彼此

我有几个docker集装箱和一个特殊情况,他们两个必须互相交谈,所以他们必须通过链接最好地相互了解。 我可以把一个Container连接到另一个,但问题是,我不能告诉他们第二个可以回到第一个。

我尝试创build并运行第一个容器并将其停止,然后创build第二个容器并停止。 接下来,我开始第一个容器与第二个链接,并开始第二个链接到第一个。 在这之后,我的机器发疯了docker进程采取了所有的CPU和内存和容器都不可访问。 当你杀死这个进程时,一个新的进程也会一样。 即使当我卸载docker重新启动机器和再次安装docker,它回到疯狂的状态,甚至没有启动一个容器。

有任何人解决scheme如何将两个容器相互连接,或让他们在两个方向互相交谈?

使用链接的一种可能的方法是通过在每个容器上公开端口并将容器绑定到主机接口来映射容器。

docker run --net=host -p 127.0.0.1:5555:5555 --name container1 my/dockerimage1 docker run --net=host -p 127.0.0.1:6666:6666 --name container2 my/dockerimage2 

这样container1可以通过localhost:6666访问container2 ,而container2可以通过localhost:5555访问container1

不是链接,但没有办法做双向链接 。

dockernetworking的文档解释了这一点。

相同networking中的容器相互关联。

你必须为这些容器创build一个networking。

 docker network create --driver bridge isolated_network 

运行容器时,必须指定networking。

 docker run -it --net=isolated_network --name container1 container1-image bash docker run -it --net=isolated_network --name container2 container2-image bash 

创build容器之后,只需使用容器的名称即可在同一networking中ping其他容器

 root@container1 ping container2 root@container2 ping container1 

另一种方法是通过将端口绑定到docker0接口来连接容器。 所有docker集装箱都默认连接到这个网桥(通常IP地址为172.17.42.1 )。

 docker run -p 172.17.42.1:8001:8080 --name container1 [image] docker run -p 172.17.42.1:8002:8080 --name container2 [image] 

这些容器可以通过172.17.42.1和特定的端口访问彼此。

像@wassgreen提供了类似的解决scheme,但具有容器不能访问主机接口的优点。

请参阅高级networking部分--net=host

但它确实让容器进程像任何其他根进程一样打开低编号的端口。 它还允许容器访问D-bus等本地networking服务。 这可能导致容器中的进程能够执行意外的事情,如重新启动计算机。 您应谨慎使用此选项。

有关通过docker0接口进行连接的更多信息,请参阅不带链接的Unorthodox docker0 连接 。

检查docker文档中的–link选项。 您可以使用以下命令链接2个容器:

 $ docker run -i -t --name container_web --link container_db image_name 

当两个容器在同一个主机上运行时,网桥或主机networking工作。 如果两个容器在不同的主机上运行,​​他们将不能相互通话。

对于不同主机上的两个容器彼此交谈,应该使用docker覆盖networking 。

泊坞窗 – 链接是一个不赞成使用的function,如泊坞窗链接文档中所述 。