docker - 두 개의 컨테이너를 생성하면 기본 브리지 네트워크를 사용하는 대신 두 개의 다른 네트워크 ID가 있습니다.

docker - 두 개의 컨테이너를 생성하면 기본 브리지 네트워크를 사용하는 대신 두 개의 다른 네트워크 ID가 있습니다.

내 목표는, 그거였어젠킨스컨테이너는 다음과 "대화"합니다.앤서블컨테이너를 만들기 위해젠킨스파일젠킨스관로.

나는 그 두 컨테이너가다리네트워크를 만들고 동일한 네트워크 ID의 IP 주소 2개를 얻었지만 대신 추가로 두 개의 네트워크가 생성되었고 각 컨테이너는 서로 다른 네트워크 ID의 IP를 얻었습니다.

또한 해당 두 컨테이너가 인터넷에 액세스할 수 있을 것으로 예상됩니다.

따라서 Windows 10에서는 Docker Desktop을 실행하고 있으며 docker-compose.yml 파일이 2개 있습니다
.젠킨스컨테이너:

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-compose up --build?
비)해당 컨테이너를 어떻게 작동하게 만들 수 있습니까?다리네트워크를 연결하고 동일한 네트워크 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에 대해서도 동일한 아이디어를 따르십시오.

관련 정보