多个docker compose启动的容器之间通信实现过程

 更新时间:2025年09月07日 14:19:26   作者:Allocator  
文章讨论了Docker Compose中多组容器编排的问题,指出默认情况下各组容器网络会隔离,为了解决跨组访问的问题,文章建议创建一个公共网络,并将各组容器组的默认网络配置改为该公共网络,同时启用外部连接,这样可以实现跨组访问,解决网络隔离的限制

背景

本地或者某些开发环境我们会使用docker-compose.yml来编排一组容器,同时会给这一组容器分配默认的网络外部名称

以busybox镜像举个例子:

services:

    g1:
        image: busybox:latest
        container_name: g1
        restart: unless-stopped
        command: ['sh', '-c', 'echo "Hello from BusyBox!" && sleep 3600']

networks:
    default:
        name: group1_net

使用docker compose docker-compose.yml up -d启动后使用docker network ls就可以看到名字为group1_net的默认网络

docker network ls
...

eda03dfdc6ed   group1_net             bridge    local

一般我们会将这一组相关的容器编排的docker-compose.yml文件放置于一个文件夹中进行维护,当本地存在多组编排的容器的docker-compose.yml文件的时候,也就相当于会有多个文件夹用于存放和管理这些文件,比如本地有两组编排的容器,

那么本地文件结构如下:

tree
.
├── group1
│   └── docker-compose.yml
└── group2
    └── docker-compose.yml

2 directories, 2 files

启动这两组容器,可以看到相应的网络同时创建

8d6bce7a03cc   group1_net             bridge    local
080cfe997ef2   group2_net             bridge    local

这个时候会引入一个问题,这种方式会让启动的每一组容器网络是隔离的,一般情况下编排容器组的时候确实是每一组容器应该做网络隔离,但是某些场景还是会遇到需要夸容器组的网络访问,

最佳实现

实现跨容器组(docker-compose)的容器访问最佳实现还是将需要跨组访问的容器组分配到同一个网络.

这个实现非常简单,首先使用如下指令创建一个network公共网络.

docker network create group_share_net

然后修改每一个容器组的docker-compose.yml默认网络配置项.将其网络名字改为前一步创建的公共网络名,即group_share_net同时配置external: true,表示此docker-compose.yml使用已经定义好的外部网络.

修改后的结果如下:

services:

    g1:
        image: busybox:latest
        container_name: g1
        restart: unless-stopped
        command: ['sh', '-c', 'echo "Hello from BusyBox!" && sleep 3600']

networks:
    default:
        external: true
        name: group_share_net

以及

services:

    g2:
        image: busybox:latest
        container_name: g2
        restart: unless-stopped
        command: ['sh', '-c', 'echo "Hello from BusyBox!" && sleep 3600']

networks:
    default:
        external: true
        name: group_share_net

再重启两个容器组,这个时候进入到容器g1去尝试ping通容器g2.

docker exec -it g1 /bin/sh
/ # ping -c 5 g2
PING g2 (172.20.0.2): 56 data bytes
64 bytes from 172.20.0.2: seq=0 ttl=64 time=0.061 ms
64 bytes from 172.20.0.2: seq=1 ttl=64 time=0.024 ms
64 bytes from 172.20.0.2: seq=2 ttl=64 time=0.026 ms
64 bytes from 172.20.0.2: seq=3 ttl=64 time=0.017 ms
64 bytes from 172.20.0.2: seq=4 ttl=64 time=0.019 ms

--- g2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.017/0.029/0.061 ms

这里就可以看出group1中的g1容器可以正常访问到group2中的g2容器,表明两个docker-compose.yml编排的容器就能够实现相互访问.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Windows Server 2016 安装 Docker的过程及遇到问题

    Windows Server 2016 安装 Docker的过程及遇到问题

    若要在 Windows Server 上安装 Docker,可以使用由 Microsoft 发布的 OneGet 提供程序 PowerShell 模块,接下来通过本文给大家介绍Windows Server 2016 安装 Docker的过程及遇到问题,一起看看吧
    2021-09-09
  • 使用docker inspect查看容器部署位置的方法

    使用docker inspect查看容器部署位置的方法

    Docker Compose 作为 Docker 生态系统中的重要组件,极大简化了多容器应用的管理工作,在实际运维过程中,我们经常需要了解这些由 Compose 启动的容器的具体部署位置和详细配置信息,这正是docker inspect命令大显身手的地方,下面小编给大家介绍一下查看方法
    2025-05-05
  • 减少Docker镜像大小的10个优化技巧

    减少Docker镜像大小的10个优化技巧

    当使用Docker时,镜像大小是一个很大的问题,下面这篇文章主要给大家介绍了关于减少Docker镜像大小的10个优化技巧,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 优化 Docker 镜像大小常见的方式

    优化 Docker 镜像大小常见的方式

    这篇文章主要介绍了如何优化 Docker 镜像大小,帮助大家更好的理解和使用docker容器,感兴趣的朋友可以了解下。
    2020-09-09
  • 基于Docker+Selenium Grid的测试技术应用示例代码

    基于Docker+Selenium Grid的测试技术应用示例代码

    Selenium Grid允许我们在多台计算机上并行运行测试,并集中管理不同的浏览器版本和浏览器配置。这篇文章给大家介绍基于Docker+Selenium Grid的测试技术应用示例代码,需要的朋友参考下吧
    2021-08-08
  • 如何批量删除Docker中已经停止的容器的几种方法

    如何批量删除Docker中已经停止的容器的几种方法

    本文主要介绍了批量删除Docker中已经停止的容器的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Docker Compose在不同环境的多种安装方式

    Docker Compose在不同环境的多种安装方式

    这篇文章主要介绍了Docker Compose在不同环境的多种安装方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • docker部署应用的三种方式

    docker部署应用的三种方式

    越来越多的前端团队选择用Docker部署前端项目,本文主要介绍了docker部署应用的三种方式,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • docker入门之容器介绍

    docker入门之容器介绍

    这篇文章主要介绍了docker入门之容器介绍的相关资料,需要的朋友可以参考下
    2018-10-10
  • docker 如何修改容器的端口

    docker 如何修改容器的端口

    正在运行的容器端口冲突了,但是还需要这个容器,怎么办?只能修改端口了,今天通过本文给大家介绍docker 如何修改容器的端口,感兴趣的朋友一起看看吧
    2024-01-01

最新评论