[docker] docker-compose로 시작된 실행중인 컨테이너에 연결할 수 없습니다.

Docker 컨테이너를 사용하여 로컬 개발 환경을 설정하고 있습니다. docker-compose.yml은 다음과 같습니다.

version: '2'

services:
  db:
    image: mongo:3
  mq:
    image: rabbitmq:3
  api:
    build: .
    image: my_app/api
    ports:
      - "3000:3000"
    links:
      - db
      - mq
    environment:
      - NODE_ENV=development

오류없이 시작됩니다. Docker는 실행중인 컨테이너 3 개를 나열합니다.

docker-compose up -d
docker ps

e90e5a8b5d33        my_app/api    "/usr/local/bin/node "   0.0.0.0:3000->3000/tcp               my_app_api_1
42bfcd971b16        mongo:3       "/entrypoint.sh mongo"   27017/tcp                            my_app_db_1
a0685a816c47        rabbitmq:3    "/docker-entrypoint.s"   4369/tcp, 5671-5672/tcp, 25672/tcp   my_app_mq_1

그러나 다른 컨테이너에서 실행중인 컨테이너에 연결하려고하면

docker run --link my_app_mq_1:mq --link my_app_db_1:db -it worker

오류가 발생합니다

 docker: Error response from daemon: Cannot link to /my_app_mq_1, as it does not belong to the default network.

나는 또한 시도했다

 docker run --link my_app_mq_1:mq --link my_app_db_1:db -it --net default worker

같은 오류입니다.

그렇다면 docker-compose로 시작된 실행중인 컨테이너에 어떻게 연결할 수 있습니까?



답변

좋아, 그것에 대한 답을 찾았습니다. 다른 사람이 같은 문제를 겪을 경우에는

docker network ls

이 명령은 모든 Docker 네트워크를 나열합니다. docker-compose는 docker-compose up을 실행할 때 새 네트워크를 만듭니다. 제 경우에는 네트워크 이름이 myapp_default로 지정됩니다.

참고 : 앱의 네트워크에는 ‘프로젝트 이름’을 기반으로 이름이 지정되며, 이는 위치하는 디렉토리의 이름을 기반으로합니다. –project-name 플래그 또는 COMPOSE_PROJECT_NAME 환경 변수를 사용하여 프로젝트 이름을 재정의 할 수 있습니다. . Compose의 네트워킹

따라서 이러한 컨테이너에 연결하는 올바른 방법은

docker run --link my_app_mq_1:mq --link my_app_db_1:db -it --net myapp_default worker


답변

링크 실행 명령

docker run --network=YOUR_NETWORK --link SERVICE -t -i app command


답변

서비스 정의 버전 2 이상을 docker-compose사용하는 경우 사용자 정의 네트워크를 생성합니다. 사용자 정의 네트워크의 이름 확인은 Docker 내장 DNS 서버를 통해 작동합니다. 다음은 문서 의 관련 인용문입니다 .

Docker 내장 DNS 서버는 주어진 [사용자 정의] 네트워크에 연결된 컨테이너의 이름 확인을 활성화합니다. 이는 연결된 컨테이너가 컨테이너 이름으로 동일한 네트워크의 다른 컨테이너를 ping 할 수 있음을 의미합니다.

컨테이너는 docker-compose생성 된 네트워크 별칭으로도 사용할 수 있습니다 . 다음과 같은 명령으로 확인할 수 있습니다.

docker inspect \
  -f '{{json .NetworkSettings.Networks.myapp_default.Aliases}}' my_app_db_1

그것은 인쇄합니다 ["db","$CONTAINER_ID"].

--link기존 사용자 정의 네트워크의 경우 링크를 제공해 도 아무런 효과가 없습니다. /etc/hosts해당하는 줄이없는 을 확인하고 볼 수 있습니다 .

따라서 다음 명령으로 충분합니다.

docker run -it --net myapp_default worker


답변