多個docker compose啟動的容器之間通信實現(xiàn)過程
背景
本地或者某些開發(fā)環(huán)境我們會使用docker-compose.yml來編排一組容器,同時會給這一組容器分配默認的網(wǎng)絡外部名稱,
以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)絡
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
啟動這兩組容器,可以看到相應的網(wǎng)絡同時創(chuàng)建
8d6bce7a03cc group1_net bridge local 080cfe997ef2 group2_net bridge local
這個時候會引入一個問題,這種方式會讓啟動的每一組容器網(wǎng)絡是隔離的,一般情況下編排容器組的時候確實是每一組容器應該做網(wǎng)絡隔離,但是某些場景還是會遇到需要夸容器組的網(wǎng)絡訪問,
最佳實現(xiàn)
實現(xiàn)跨容器組(docker-compose)的容器訪問最佳實現(xiàn)還是將需要跨組訪問的容器組分配到同一個網(wǎng)絡.
這個實現(xiàn)非常簡單,首先使用如下指令創(chuàng)建一個network公共網(wǎng)絡.
docker network create group_share_net
然后修改每一個容器組的docker-compose.yml的默認網(wǎng)絡配置項.將其網(wǎng)絡名字改為前一步創(chuàng)建的公共網(wǎng)絡名,即group_share_net同時配置external: true,表示此docker-compose.yml使用已經定義好的外部網(wǎng)絡.
修改后的結果如下:
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編排的容器就能夠實現(xiàn)相互訪問.
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Windows Server 2016 安裝 Docker的過程及遇到問題
若要在 Windows Server 上安裝 Docker,可以使用由 Microsoft 發(fā)布的 OneGet 提供程序 PowerShell 模塊,接下來通過本文給大家介紹Windows Server 2016 安裝 Docker的過程及遇到問題,一起看看吧2021-09-09
基于Docker+Selenium Grid的測試技術應用示例代碼
Selenium Grid允許我們在多臺計算機上并行運行測試,并集中管理不同的瀏覽器版本和瀏覽器配置。這篇文章給大家介紹基于Docker+Selenium Grid的測試技術應用示例代碼,需要的朋友參考下吧2021-08-08
Docker Compose在不同環(huán)境的多種安裝方式
這篇文章主要介紹了Docker Compose在不同環(huán)境的多種安裝方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10

