Networking
docker - 創建兩個容器有兩個不同的網路 ID,而不是使用預設的橋接網路
我的目標是,Jenkins容器將與Ansible容器“對話”,以便為**Jenkins管道創建Jenkins文件。
我預計這兩個容器將“加入”以橋接網路並獲得相同網路 ID 的 2 個 IP 地址,但是創建了另外兩個網路,並且每個容器都獲得了不同網路 ID 的 IP。
此外,預計這兩個容器將可以訪問網際網路。
因此,在我的 Windows 10 中,我正在執行 Docker Desktop,我有 2 個 docker-compose.yml 文件,
一個用於Jenkins容器:
version: '3.7' services: jenkins: image: jenkins/jenkins:lts privileged: true user: root ports: - 8080:8080 - 50000:50000 container_name: jenkins
另一個,對於Ansible容器:
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 網路部分,發現除了bridge、host和none之外,還創建了 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 網路? b)如何使這些容器與橋接網路一起工作並獲得相同網路 ID(橋接網路 ID 172.17.xx)的 IP,以便它們能夠相互通信?
docker-compose up --build
連接多個 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 遵循相同的想法。