Estou tentando conectar um aplicativo da web, implantado em um contêiner, ao RabbitMQ, implantado em outro contêiner.
Contando com este contêiner Connecting to RabbitMQ com docker-compose , criei o seguinte 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 é um serviço de aplicação web, no qual prescrevo as seguintes propriedades RabbitMQ:
host = broker
port = 15672
login = guest
password = guest
Selecionei 'broker' como host, conforme documentação recomendada para conectar containers por default-net, usando o nome do serviço no docker-compose.
E isso não funciona. Também tentei usar "localhost" como host para conexão.
Além disso, ao inspecionar o contêiner "rabbit_chat", vejo na saída:
"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"
}
Responder1
Experimente umrede:
services:
webapp:
...
networks:
- mynetwork
broker:
...
networks:
- mynetwork
networks:
mynetwork:
Isso também configura o DNS interno, para que você possa usar broker
como nome de host webapp
para se referir ao outro contêiner.
Responder2
Pelos seus comentários, parece que há problemas de autorização de acesso, e não problemas de porta do Docker.
Primeiro, tente curl de dentro do contêiner Rabbit-MQ. Pelo log parece que você não tem curl instalado no contêiner Rabbit, então instale-o e tente.
Em seguida, tente de fora (da sua máquina):
basta mapear as portas no contêiner do coelho: "5672:5672" e "15672:15672".
curl localhost:5672 (ou faça docker inspecionar e enrolar diretamente no endereço IP do contêiner).
As imagens são construídas a partir da mesma imagem base? talvez você tenha ufw na imagem do coelho.
Tente também desligar o ufw na sua máquina e verifique (se tiver)
A melhor maneira de se comunicar entre contêineres no docker-compose é através da ponte de rede, então, eventualmente, você terá que usá-la.