docker-compose를 통해 2개의 도커 컨테이너 연결

docker-compose를 통해 2개의 도커 컨테이너 연결

한 컨테이너에서 배포된 웹 애플리케이션을 다른 컨테이너에 배포된 Rabbitmq에 연결하려고 합니다.

docker-compose를 사용하여 RabbitMQ 컨테이너에 연결을 사용하여 다음 docker-compose를 만들었습니다.

version: '3'

services:
 webapp:
    container_name: chat
    build:
      context: .
    depends_on:
      - broker
    ports:
      - "8080:8080"

broker:
   container_name: rabbit_chat
   image: rabbitmq
   command: rabbitmq-server
   expose:
     - 5672
     - 15672
   healthcheck:
     test: ["CMD", "curl", "-f", "http://broker:5672"]
     interval: 30s
     timeout: 10s
     retries: 5

webapp은 다음 Rabbitmq 속성을 지정한 웹 애플리케이션용 서비스입니다.

host = broker
port = 15672
login = guest
password = guest

문서에서는 기본 네트워크 연결 컨테이너에 대해 docker-compose의 서비스 이름을 사용하도록 권장하므로 "broker"를 호스트로 선택했습니다.

이것은 작동하지 않습니다. 또한 연결 호스트로 "localhost"를 사용해 보았습니다.

또한 출력에 표시된 "rabbit_chat" 컨테이너를 확인합니다.

  "Log": [
            {
                "Start": "2020-04-11T14:54:25.0988242Z",
                "End": "2020-04-11T14:54:25.2920557Z",
                "ExitCode": -1,
                "Output": "OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused \"exec: \\\"curl\\\": executable file not found in $PATH\": unknown"
            }

답변1

시도 해봐회로망:

services:
  webapp:
    ...
    networks:
    - mynetwork

 broker:
   ...
    networks:
    - mynetwork

networks:
  mynetwork:

또한 내부 DNS를 설정하므로 실제로 이를 broker호스트 이름 으로 사용하여 webapp다른 컨테이너를 참조할 수 있습니다.

답변2

귀하의 의견에 따르면 이는 도커 포트 문제가 아닌 액세스 권한 문제인 것 같습니다.
먼저, Rabbit-mq 컨테이너 내부에서 컬을 시도해 보세요. 로그를 보면 토끼 컨테이너에 컬이 설치되어 있지 않은 것처럼 보이므로 설치하고 시도해 보세요.
그런 다음 외부에서 시도하십시오(컴퓨터에서).
토끼 컨테이너의 포트를 "5672:5672" 및 "15672:15672"로 매핑하십시오.
컬 localhost:5672(또는 docker 확인을 수행하고 컨테이너 IP 주소로 직접 컬링).

이러한 이미지는 동일한 기본 이미지로 만들어졌나요? 어쩌면 당신의 토끼 이미지에 ufw가 있을 수도 있습니다.
또한 컴퓨터에서 ufw를 끄고 있는지 확인해보세요.

docker-compose에서 컨테이너 간에 통신하는 가장 좋은 방법은 브리지를 통하는 것이므로 궁극적으로 브리지를 사용해야 합니다.

관련 정보