多個docker compose啟動的容器之間通信實現(xiàn)過程
背景
本地或者某些開發(fā)環(huán)境我們會使用docker-compose.yml來編排一組容器,同時會給這一組容器分配默認的網(wǎng)絡(luò)外部名稱,
以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的默認網(wǎng)絡(luò)
docker network ls ... eda03dfdc6ed group1_net bridge local
一般我們會將這一組相關(guān)的容器編排的docker-compose.yml文件放置于一個文件夾中進行維護,當本地存在多組編排的容器的docker-compose.yml文件的時候,也就相當于會有多個文件夾用于存放和管理這些文件,比如本地有兩組編排的容器,
那么本地文件結(jié)構(gòu)如下:
tree
.
├── group1
│ └── docker-compose.yml
└── group2
└── docker-compose.yml
2 directories, 2 files
啟動這兩組容器,可以看到相應(yīng)的網(wǎng)絡(luò)同時創(chuàng)建
8d6bce7a03cc group1_net bridge local 080cfe997ef2 group2_net bridge local
這個時候會引入一個問題,這種方式會讓啟動的每一組容器網(wǎng)絡(luò)是隔離的,一般情況下編排容器組的時候確實是每一組容器應(yīng)該做網(wǎng)絡(luò)隔離,但是某些場景還是會遇到需要夸容器組的網(wǎng)絡(luò)訪問,
最佳實現(xiàn)
實現(xiàn)跨容器組(docker-compose)的容器訪問最佳實現(xiàn)還是將需要跨組訪問的容器組分配到同一個網(wǎng)絡(luò).
這個實現(xiàn)非常簡單,首先使用如下指令創(chuàng)建一個network公共網(wǎng)絡(luò).
docker network create group_share_net
然后修改每一個容器組的docker-compose.yml的默認網(wǎng)絡(luò)配置項.將其網(wǎng)絡(luò)名字改為前一步創(chuàng)建的公共網(wǎng)絡(luò)名,即group_share_net同時配置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
再重啟兩個容器組,這個時候進入到容器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編排的容器就能夠?qū)崿F(xiàn)相互訪問.
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
啟動docker錯誤systemctl status docker.service問題及解決
文章討論了啟動Docker和執(zhí)行docker ps命令失敗的問題,但docker -v顯示成功,解決辦法包括在阿里云容器鏡像中找到鏡像加速器或使用公共鏡像地址,默認情況下,Docker使用官方地址2025-01-01
Linux環(huán)境下安裝docker環(huán)境(親測無坑)
大家好,本篇文章主要講的是Linux環(huán)境下安裝docker環(huán)境(親測無坑),感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下2021-12-12

