我有几个Docker容器,还有一个特例,其中两个必须互相交谈,因此它们必须通过链接最多彼此了解。我可以将一个容器链接到另一个容器,但是问题是,我不能告诉他们第二个容器可以与第一个容器对话。
我尝试创建并运行第一个容器并将其停止,然后创建了第二个容器并同时将其停止。接下来,我再次启动了第一个容器并链接到第二个容器,并启动了第二个容器并链接到第一个容器。此后,我的机器发疯了,docker进程占用了所有CPU和内存,并且两个容器都无法访问。当您终止该进程时,将弹出一个新的进程。即使当我卸载docker重启机器并再次安装docker时,它也回到了疯狂的状态,甚至没有启动任何一个容器。
有谁能找到一种解决方案,如何将两个容器相互链接或如何使它们在两个方向上相互通信?
推荐的方法是创建一个用户定义的网络,您可以在其中连接多个容器。
使用以下命令可以轻松创建网络:
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的 通过 本地主机:6666 和 container2的 可访问 container1 通过 本地主机:5555 。
Docker网络的文档对此进行了进一步说明。