Conecte 2 docker-containers através do docker-compose

Conecte 2 docker-containers através do docker-compose

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

informação relacionada