我的目標是詹金斯容器將與安西布爾容器以便創建詹金斯歸檔詹金斯管道。
我預計這兩個容器將“加入”橋網絡並獲得相同網絡 ID 的 2 個 IP 位址,但創建了額外的兩個網絡,並且每個容器獲得不同網絡 ID 的 IP。
此外,預計這兩個容器將能夠存取互聯網。
因此,在我的 Windows 10 中,我運行 Docker Desktop,我有 2 個 docker-compose.yml 文件,
其中一個用於詹金斯容器:
version: '3.7'
services:
jenkins:
image: jenkins/jenkins:lts
privileged: true
user: root
ports:
- 8080:8080
- 50000:50000
container_name: jenkins
另一個,對於安西布爾容器:
version: '2'
services:
ansible:
container_name: ansible
hostname: ansible
image: ansible
volumes:
- ~/product/ansible:/ansible
working_dir: /ansible
build:
context: .
dockerfile: Dockerfile
dns:
- 200.20.200.20
我為每個 docker-compose.yml 檔案執行以下命令,因此我有兩台單獨的機器:
docker-compose up --build
我檢查了容器的網路詳細信息,發現每個容器都有不同的網路 ID,如下所示:
PS > docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ansible
172.18.0.2
PS > docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' jenkins
172.19.0.2
檢查我的 docker 網路部分,發現另外創建了 2 個網絡橋,主持人和沒有任何:
PS > docker network ls
NETWORK ID NAME DRIVER SCOPE
8cefaed24885 ansible_default bridge local
44bedcd1622d bridge bridge local
61e1c7f7051e host host local
b5a7a7a424a4 jenkins_default bridge local
4e5d6c77cb5a none null local
當然,檢查橋網路顯示容器鍵為空:
{
"Name": "bridge",
"Id": "44bedcd1622d820ce4e29a5cd545f244ba2d303102f1956fe76069a63e7c220e",
"Created": "2021-08-25T13:13:57.6577149Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {},
"CreatedTime": 1629897237657
}
我的問題是:
a)為什麼當我運行命令時又創建了兩個 docker 網路docker-compose up --build
?
b)我怎樣才能使這些容器與橋網路並取得相同網路 ID 的 IP(橋接網路 ID 172.17.xx)以便他們能夠互相交談?
答案1
連接多個 docker-compose 實例的解決方案是使用外部網路。
首先使用以下命令建立一個新網路:
docker network create my-network
然後將以下內容加入 docker-compose.yml 中:
networks:
my_network:
external: true
在服務的網路部分:
(...)
networks:
- my_network
(...)
Jenkins docker-compose 將變成:
version: '3.7'
networks:
my_network:
external: true
services:
jenkins:
image: jenkins/jenkins:lts
privileged: true
user: root
networks:
- my_network
ports:
- 8080:8080
- 50000:50000
container_name: jenkins
對其他 docker-compose.yml 遵循相同的想法。