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-properties를 규정하는 웹 애플리케이션 서비스입니다.

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

docker-compose의 서비스 이름을 사용하여 default-net으로 컨테이너를 연결하도록 권장되는 문서에서와 같이 '브로커'를 호스트로 선택했습니다.

그리고 이것은 작동하지 않습니다. 또한 연결을 위한 호스트로 "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에서 컨테이너 간에 통신하는 가장 좋은 방법은 네트워크 브리지를 통하는 것이므로 결국 이를 사용해야 합니다.

관련 정보