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