多個(gè)docker compose啟動(dòng)的容器之間通信實(shí)現(xiàn)過(guò)程
背景
本地或者某些開(kāi)發(fā)環(huán)境我們會(huì)使用docker-compose.yml來(lái)編排一組容器,同時(shí)會(huì)給這一組容器分配默認(rèn)的網(wǎng)絡(luò)外部名稱,
以busybox鏡像舉個(gè)例子:
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啟動(dòng)后使用docker network ls就可以看到名字為group1_net的默認(rèn)網(wǎng)絡(luò)
docker network ls ... eda03dfdc6ed group1_net bridge local
一般我們會(huì)將這一組相關(guān)的容器編排的docker-compose.yml文件放置于一個(gè)文件夾中進(jìn)行維護(hù),當(dāng)本地存在多組編排的容器的docker-compose.yml文件的時(shí)候,也就相當(dāng)于會(huì)有多個(gè)文件夾用于存放和管理這些文件,比如本地有兩組編排的容器,
那么本地文件結(jié)構(gòu)如下:
tree
.
├── group1
│ └── docker-compose.yml
└── group2
└── docker-compose.yml
2 directories, 2 files
啟動(dòng)這兩組容器,可以看到相應(yīng)的網(wǎng)絡(luò)同時(shí)創(chuàng)建
8d6bce7a03cc group1_net bridge local 080cfe997ef2 group2_net bridge local
這個(gè)時(shí)候會(huì)引入一個(gè)問(wèn)題,這種方式會(huì)讓啟動(dòng)的每一組容器網(wǎng)絡(luò)是隔離的,一般情況下編排容器組的時(shí)候確實(shí)是每一組容器應(yīng)該做網(wǎng)絡(luò)隔離,但是某些場(chǎng)景還是會(huì)遇到需要夸容器組的網(wǎng)絡(luò)訪問(wèn),
最佳實(shí)現(xiàn)
實(shí)現(xiàn)跨容器組(docker-compose)的容器訪問(wèn)最佳實(shí)現(xiàn)還是將需要跨組訪問(wèn)的容器組分配到同一個(gè)網(wǎng)絡(luò).
這個(gè)實(shí)現(xiàn)非常簡(jiǎn)單,首先使用如下指令創(chuàng)建一個(gè)network公共網(wǎng)絡(luò).
docker network create group_share_net
然后修改每一個(gè)容器組的docker-compose.yml的默認(rèn)網(wǎng)絡(luò)配置項(xiàng).將其網(wǎng)絡(luò)名字改為前一步創(chuàng)建的公共網(wǎng)絡(luò)名,即group_share_net同時(shí)配置external: true,表示此docker-compose.yml使用已經(jīng)定義好的外部網(wǎng)絡(luò).
修改后的結(jié)果如下:
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
再重啟兩個(gè)容器組,這個(gè)時(shí)候進(jìn)入到容器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容器可以正常訪問(wèn)到group2中的g2容器,表明兩個(gè)docker-compose.yml編排的容器就能夠?qū)崿F(xiàn)相互訪問(wèn).
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker實(shí)現(xiàn)分布式應(yīng)用功能教程
這篇文章主要介紹了Docker實(shí)現(xiàn)分布式應(yīng)用功能,涉及docker分布式應(yīng)用、負(fù)載均衡相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2018-06-06
啟動(dòng)docker錯(cuò)誤systemctl status docker.service問(wèn)題及解決
文章討論了啟動(dòng)Docker和執(zhí)行docker ps命令失敗的問(wèn)題,但docker -v顯示成功,解決辦法包括在阿里云容器鏡像中找到鏡像加速器或使用公共鏡像地址,默認(rèn)情況下,Docker使用官方地址2025-01-01
通過(guò)Docker?Compose部署MySQL的詳細(xì)教程
Docker?Compose?作為?Docker?官方的容器編排工具,為?MySQL?數(shù)據(jù)庫(kù)部署帶來(lái)了顯著優(yōu)勢(shì),下面小編就來(lái)為大家詳細(xì)介紹一下具體的流程吧2025-03-03
Linux環(huán)境下安裝docker環(huán)境(親測(cè)無(wú)坑)
大家好,本篇文章主要講的是Linux環(huán)境下安裝docker環(huán)境(親測(cè)無(wú)坑),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2021-12-12
docker環(huán)境部署domino的詳細(xì)過(guò)程
要在Docker容器中運(yùn)行Domino服務(wù)器,你需要?jiǎng)?chuàng)建一個(gè)Docker容器,該容器運(yùn)行一個(gè)適合Domino服務(wù)器運(yùn)行的操作系統(tǒng)和必要的軟件,本文給大家介紹docker環(huán)境部署domino的詳細(xì)過(guò)程,感興趣的朋友跟隨小編一起看看吧2026-04-04
Docker Buildx 簡(jiǎn)介與安裝指南(最新推薦)
Docker Buildx 是 Docker 官方推出的一款增強(qiáng)型構(gòu)建工具,旨在簡(jiǎn)化和優(yōu)化多架構(gòu)容器映像的構(gòu)建流程,這篇文章主要介紹了Docker Buildx 簡(jiǎn)介與安裝指南,需要的朋友可以參考下2024-08-08

