Estoy intentando conectar una aplicación web, implementada desde un contenedor, a Rabbitmq, implementada en otro contenedor.
Al confiar en este contenedor Conexión a RabbitMQ con docker-compose, creé el siguiente 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 es un servicio de aplicación web, en el que prescribo las siguientes propiedades de RabbitMQ:
host = broker
port = 15672
login = guest
password = guest
Seleccioné 'broker' como host, como en la documentación recomendada para conectar contenedores de forma predeterminada, usando el nombre del servicio en docker-compose.
Y esto no funciona. También intenté usar "localhost" como host para la conexión.
Además, al inspeccionar el contenedor "rabbit_chat" veo en el resultado:
"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"
}
Respuesta1
Pruebe unred:
services:
webapp:
...
networks:
- mynetwork
broker:
...
networks:
- mynetwork
networks:
mynetwork:
Esto también configura el DNS interno, por lo que puede usarlo broker
como nombre de host webapp
para referirse al otro contenedor.
Respuesta2
Según sus comentarios, parece que se trata de problemas de autorización de acceso, en lugar de problemas del puerto Docker.
Primero, intente curl desde el interior del contenedor Rabbit-mq. Según el registro, parece que no tiene curl instalado en el contenedor Rabbit, así que instálelo e intente.
Luego intente desde afuera (desde su máquina):
simplemente asigne los puertos en el contenedor Rabbit: "5672:5672" y "15672:15672".
curl localhost:5672 (o docker inspeccione y curl directamente a la dirección IP del contenedor).
¿Las imágenes están construidas a partir de la misma imagen base? tal vez tengas ufw en la imagen del conejo.
También intente apagar el ufw en su máquina y verifique (si lo tiene)
La mejor manera de comunicarse entre contenedores en Docker-Compose es a través del puente de red, por lo que eventualmente tendrás que usarlo.