多个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编排的容器就能够实现相互访问.

总结

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

相关文章

  • docker 安装Oracle-12C的方法详解

    docker 安装Oracle-12C的方法详解

    这篇文章主要介绍了docker 安装Oracle-12C的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Docker实现分布式应用功能教程

    Docker实现分布式应用功能教程

    这篇文章主要介绍了Docker实现分布式应用功能,涉及docker分布式应用、负载均衡相关实现技巧与操作注意事项,需要的朋友可以参考下
    2018-06-06
  • 启动docker错误systemctl status docker.service问题及解决

    启动docker错误systemctl status docker.service问题及解决

    文章讨论了启动Docker和执行docker ps命令失败的问题,但docker -v显示成功,解决办法包括在阿里云容器镜像中找到镜像加速器或使用公共镜像地址,默认情况下,Docker使用官方地址
    2025-01-01
  • 通过Docker Compose部署MySQL的详细教程

    通过Docker Compose部署MySQL的详细教程

    Docker Compose 作为 Docker 官方的容器编排工具,为 MySQL 数据库部署带来了显著优势,下面小编就来为大家详细介绍一下具体的流程吧
    2025-03-03
  • 用docker运行postgreSQL的方法步骤

    用docker运行postgreSQL的方法步骤

    这篇文章主要介绍了用docker运行postgreSQL的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Linux环境下安装docker环境(亲测无坑)

    Linux环境下安装docker环境(亲测无坑)

    大家好,本篇文章主要讲的是Linux环境下安装docker环境(亲测无坑),感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2021-12-12
  • docker环境部署domino的详细过程

    docker环境部署domino的详细过程

    要在Docker容器中运行Domino服务器,你需要创建一个Docker容器,该容器运行一个适合Domino服务器运行的操作系统和必要的软件,本文给大家介绍docker环境部署domino的详细过程,感兴趣的朋友跟随小编一起看看吧
    2026-04-04
  • Docker Buildx 简介与安装指南(最新推荐)

    Docker Buildx 简介与安装指南(最新推荐)

    Docker Buildx 是 Docker 官方推出的一款增强型构建工具,旨在简化和优化多架构容器映像的构建流程,这篇文章主要介绍了Docker Buildx 简介与安装指南,需要的朋友可以参考下
    2024-08-08
  • docker国内镜像源配置的解决方案

    docker国内镜像源配置的解决方案

    文章介绍了如何配置Docker国内镜像源,以解决拉取镜像时速度慢或无法下载的问题,常见的国内镜像源包括Docker国内镜像源、中科大源、网易源、百度源、腾讯源、阿里源等,配置文件位于/etc/docker/daemon.json,如果没有该文件则需创建并修改
    2025-03-03
  • 如何封装自定义Docker镜像

    如何封装自定义Docker镜像

    这篇文章主要介绍了如何封装自定义Docker镜像问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06

最新评论