让两个容器相互链接

 伟哥 发布于 2022-12-04 14:56

我有几个docker容器和一个特殊情况,其中两个必须互相交谈,所以他们必须最好通过链接相互了解.我可以将一个容器链接到另一个容器,但问题是,我不能告诉他们第二个容器可以回复第一个容器.

我试图创建并运行第一个容器并停止它,然后我创建了第二个容器并停止了它.接下来,我再次启动第一个容器,链接到第二个,并启动第二个容器链接到第一个容器.在此之后我的机器发疯了,docker进程占用了所有CPU和内存,并且两个容器都没有访问.当你杀死这个过程时,一个新的过程与之相同.即使当我卸载docker重新启动机器并再次安装docker时,它甚至没有启动其中一个容器就回到疯狂状态.

有没有人可以解决如何将两个容器相互链接或让它们在两个方向上相互交谈的方法?

3 个回答
  • 同一网络中的容器相互链接.

    您必须为这些容器创建网络.

    docker network create --driver bridge isolated_network
    

    运行容器时,必须指定网络.

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

    在创建容器之后,您可以仅使用容器的名称ping同一网络中的其他容器

    root@container1 ping container2
    root@container2 ping container1
    

    2022-12-11 02:02 回答
  • 建议的方法是创建一个用户定义的网络,您可以在其中连接多个容器.

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

    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网络的文档进一步解释了这一点.

    2022-12-11 02:12 回答
  • 另一种方法是通过将端口绑定到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一样提供了类似的解决方案,但其优点是容器无法访问主机接口.

    请参阅高级网络部分--net=host:

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

    有关通过docker0接口进行此连接的详细信息,请参阅不带链接的非正统docker连接.

    2022-12-11 03:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有