一尘不染

让两个容器彼此链接

docker

我有几个Docker容器,还有一个特例,其中两个必须互相交谈,因此它们必须通过链接最多彼此了解。我可以将一个容器链接到另一个容器,但是问题是,我不能告诉他们第二个容器可以与第一个容器对话。

我尝试创建并运行第一个容器并将其停止,然后创建了第二个容器并同时将其停止。接下来,我再次启动了第一个容器并链接到第二个容器,并启动了第二个容器并链接到第一个容器。此后,我的机器发疯了,docker进程占用了所有CPU和内存,并且两个容器都无法访问。当您终止该进程时,将弹出一个新的进程。即使当我卸载docker重启机器并再次安装docker时,它也回到了疯狂的状态,甚至没有启动任何一个容器。

有谁能找到一种解决方案,如何将两个容器相互链接或如何使它们在两个方向上相互通信?


阅读 260

收藏
2020-06-17

共1个答案

一尘不染

推荐的方法是创建一个用户定义的网络,您可以在其中连接多个容器。

使用以下命令可以轻松创建网络:

docker network create -d bridge my-net

创建网络后,您可以像这样启动容器。

第一个容器:

docker run -it --name b1 --network=my-net --rm bash:4.4

第二个容器:

docker run -it --name b2 --network=my-net --rm bash:4.4

bash-4.4# ping b1
PING b2 (172.26.0.3): 56 data bytes
64 bytes from 172.26.0.3: seq=0 ttl=64 time=0.111 ms
64 bytes from 172.26.0.3: seq=1 ttl=64 time=0.336 ms
...

可以在Docker文档中找到有关用户定义网络的更多信息。


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

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 可以访问 container2的 通过 本地主机:6666container2的 可访问
container1 通过 本地主机:5555

Docker网络文档对此进行了进一步说明。

2020-06-17