한 컨테이너에서 배포된 웹 애플리케이션을 다른 컨테이너에 배포된 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에서 컨테이너 간에 통신하는 가장 좋은 방법은 네트워크 브리지를 통하는 것이므로 결국 이를 사용해야 합니다.