[networking] 여러 도커 작성 프로젝트 간의 통신

docker-compose.yml두 개의 다른 폴더에 두 개의 별도 파일이 있습니다.

  • ~/front/docker-compose.yml
  • ~/api/docker-compose.yml

컨테이너가 컨테이너에 front요청을 보낼 수 있는지 어떻게 확인할 수 api있습니까?

나는 알고 --default-gateway옵션을 사용하여 설정할 수 있습니다 docker run특정 IP 주소가이 컨테이너에 할당 할 수 있도록하는 것이 개별 컨테이너하지만 사용할 때이 옵션을 사용할 수없는 것으로 보인다 docker-compose.

현재 나는 일을 끝내고 docker inspect my_api_container_id출력에서 게이트웨이를 봅니다. 작동하지만 문제는이 IP가 무작위로 표시되므로 신뢰할 수 없다는 것입니다.

따라서이 질문의 다른 형태는 다음과 같습니다.

  • docker-compose를 사용하여 고정 IP 주소를 특정 컨테이너에 부여 할 수 있습니까?

그러나 결국 내가보고있는 것은 다음과 같습니다.

  • 서로 다른 두 개의 도커 작성 프로젝트는 어떻게 서로 통신 할 수 있습니까?


답변

서로 대화하려는 컨테이너가 동일한 네트워크에 있는지 확인하면됩니다. 네트워크는 일류 도커 구조이며 작성에만 국한되지 않습니다.

# front/docker-compose.yml
version: '2'
services:
  front:
    ...
    networks:
      - some-net
networks:
  some-net:
    driver: bridge

# api/docker-compose.yml
version: '2'
services:
  api:
    ...
    networks:
      - front_some-net
networks:
  front_some-net:
    external: true

참고 : 앱의 네트워크에는 “프로젝트 이름”을 기반으로 이름이 지정되어 있습니다.이 이름은 현재 존재하는 디렉토리 이름을 기반으로합니다.이 경우 접두사 front_가 추가되었습니다.

그런 다음 서비스 이름을 사용하여 서로 대화 할 수 있습니다. 에서 front당신이 할 수있는 ping api반대의 경우도 마찬가지.


답변

@ johnharris85의 훌륭한 답변에 약간의 언급 만하면 도커 작성 파일을 실행할 때 ” default“네트워크가 만들어 지므로 다른 작성 파일에 외부 네트워크로 추가 할 수 있습니다.

# front/docker-compose.yml
version: '2'
  services:
    front_service:
    ...

# api/docker-compose.yml
version: '2'
services:
  api_service:
    ...
    networks:
      - front_default
networks:
  front_default:
    external: true

나 에게이 접근법은 첫 번째 docker-compose 파일을 소유하지 않았고 통신하기를 원했기 때문에 더 적합했습니다.


답변

업데이트 : 작성 파일 버전 3.5 기준 :

이것은 이제 작동합니다 :

version: "3.5"
services:
  proxy:
    image: hello-world
    ports:
      - "80:80"
    networks:
      - proxynet

networks:
  proxynet:
    name: custom_network

docker-compose up -d‘custom_network’라는 네트워크에 가입합니다. 존재하지 않으면 만들어집니다!

root@ubuntu-s-1vcpu-1gb-tor1-01:~# docker-compose up -d
Creating network "custom_network" with the default driver
Creating root_proxy_1 ... done

이제 당신은 이것을 할 수 있습니다 :

version: "2"
services:
  web:
    image: hello-world
    networks:
      - my-proxy-net
networks:
  my-proxy-net:
    external:
      name: custom_network

외부 네트워크에있는 컨테이너가 생성됩니다.

문서에서 아직 참조를 찾을 수 없지만 작동합니다!


답변

의 모든 컨테이너는 다음 구성 으로 기본 네트워크에 api가입 할 수 있습니다 .front

# api/docker-compose.yml

...

networks:
  default:
    external:
      name: front_default

docker compose guide : 기존 네트워크 사용 (아래 참조)을 참조하십시오.


답변

이전 게시물 정보는 정확하지만 “external_links”로 연결해야하는 컨테이너 연결 방법에 대한 세부 정보는 없습니다.

이 예제가 당신에게 더 명확 해지기를 바랍니다.

  • 두 개의 서비스 (svc11 및 svc12)가있는 app1 / docker-compose.yml과 두 개의 서비스 (svc21 및 svc22)가있는 app2 / docker-compose.yml이 있고 교차 방식으로 연결해야한다고 가정하십시오.

  • svc11은 svc22의 컨테이너에 연결해야합니다

  • svc21은 svc11의 컨테이너에 연결해야합니다.

따라서 구성은 다음과 같아야합니다.

이것은 app1 / docker-compose.yml입니다.


version: '2'
services:
    svc11:
        container_name: container11
        [..]
        networks:
            - default # this network
            - app2_default # external network
        external_links:
            - container22:container22
        [..]
    svc12:
       container_name: container12
       [..]

networks:
    default: # this network (app1)
        driver: bridge
    app2_default: # external network (app2)
        external: true

이것은 app2 / docker-compose.yml입니다.


version: '2'
services:
    svc21:
        container_name: container21
        [..]
        networks:
            - default # this network (app2)
            - app1_default # external network (app1)
        external_links:
            - container11:container11
        [..]
    svc22:
       container_name: container22
       [..]

networks:
    default: # this network (app2)
        driver: bridge
    app1_default: # external network (app1)
        external: true


답변

Compose 1.18 (사양 3.5)부터 필요한 모든 Compose YAML 파일에 대해 고유 한 사용자 지정 이름을 사용하여 기본 네트워크를 재정의 할 수 있습니다. 다음을 추가하는 것만 큼 간단합니다.

networks:
  default:
    name: my-app

위의 내용은 귀하가 (또는 4 이상에서 더 이상 사용하지 않는 경우) version설정 한 것으로 가정합니다 3.5.

다른 답변들도 똑같이 지적했다. 이것은 간단한 요약입니다.


답변

다음을 사용하여 모든 컨테이너 docker-compose를 동시에 함께 구성하여 모든 컨테이너가 동일한 네트워크에 연결되도록합니다.

docker compose --file ~/front/docker-compose.yml --file ~/api/docker-compose.yml up -d