docker - デフォルトのブリッジ ネットワークを使用する代わりに、2 つの異なるネットワーク ID を持つ 2 つのコンテナーを作成します。

docker - デフォルトのブリッジ ネットワークを使用する代わりに、2 つの異なるネットワーク ID を持つ 2 つのコンテナーを作成します。

私の目標は、ジェンキンスコンテナは「会話」するアンシブルコンテナを作成するジェンキンス申請するジェンキンスパイプライン。

私は、これら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 についても同じ考え方に従ってください。

関連情報