Conecte 2 contenedores acoplables a través de Docker-Compose

Conecte 2 contenedores acoplables a través de Docker-Compose

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 brokercomo nombre de host webapppara 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.

información relacionada