私の目標は、ジェンキンスコンテナは「会話」するアンシブルコンテナを作成するジェンキンス申請するジェンキンスパイプライン。
私は、これら2つのコンテナが「結合」されることを期待していました橋ネットワークを作成して同じネットワーク ID の 2 つの IP アドレスを取得しようとしましたが、代わりに追加の 2 つのネットワークが作成され、各コンテナーは異なるネットワーク ID の IP を取得しました。
また、これら 2 つのコンテナがインターネットにアクセスできると予想されます。
Windows 10でDocker Desktopを実行しているのですが、docker-compose.ymlファイルが2つあります。1
つはジェンキンス容器:
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 ファイルに対して次のコマンドを実行したので、2 台の別々のマシンができました。
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) コマンドを実行したときにさらに 2 つの 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 についても同じ考え方に従ってください。