ventana acoplable: cree dos contenedores y obtenga dos ID de red diferentes en lugar de usar la red puente predeterminada

ventana acoplable: cree dos contenedores y obtenga dos ID de red diferentes en lugar de usar la red puente predeterminada

Mi objetivo era queJenkinsEl contenedor "hablará" conansiblecontenedor para crearJenkinsarchivo paraJenkinstubería.

Se esperaba que esos dos contenedores se "unieran"puentered y obtener 2 direcciones IP de la misma identificación de red, pero en su lugar se crearon dos redes adicionales y cada contenedor obtuvo una IP de una identificación de red diferente.

Además, se espera que esos dos contenedores tengan acceso a internet.

Entonces, en mi Windows 10 estoy ejecutando Docker Desktop, tengo 2 archivos docker-compose.yml,
uno, paraJenkinsenvase:

version: '3.7'
services:
  jenkins:
    image: jenkins/jenkins:lts
    privileged: true
    user: root
    ports:
      - 8080:8080
      - 50000:50000
    container_name: jenkins

Otro, poransibleenvase:

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

Ejecuté el siguiente comando para cada archivo docker-compose.yml, por lo que tenía dos máquinas separadas:

docker-compose up --build

Inspeccioné los detalles de la red de mi contenedor y descubrí que cada contenedor tenía una ID de red diferente, consulte a continuación:

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

consulte la sección de redes de mi ventana acoplable, reveló que se crearon 2 redes más, ademáspuente,anfitriónyninguno:

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

Por supuesto, inspeccionarpuenteLa red muestra queenvasela clave está vacía:

{
    "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
}

Mi pregunta es:
a) ¿Por qué se crearon dos redes acoplables más cuando ejecuté docker-compose up --buildel comando?
b)¿Cómo puedo hacer que esos contenedores funcionen conpuentered y obtener IP de la misma identificación de red(la identificación de la red puente 172.17.xx) para que puedan hablar entre ellos?

Respuesta1

La solución para conectar varias instancias de Docker-Compose es utilizar redes externas.

Primero cree una nueva red con el comando:

docker network create my-network

Luego agregue a ambos docker-compose.yml lo siguiente:

networks:
  my_network:
    external: true

Y en el apartado de red de los servicios:

(...)
  networks:
    - my_network
(...)

La ventana acoplable de Jenkins se convertiría en:

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

Siga la misma idea para el otro docker-compose.yml.

información relacionada