Подключите 2 docker-контейнера через docker-compose

Подключите 2 docker-контейнера через docker-compose

Я пытаюсь подключить веб-приложение, развернутое в одном контейнере, к rabbitmq, развернутому в другом контейнере.

Используя этот контейнер «Подключение к RabbitMQ с помощью docker-compose», я создал следующий 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

Я выбрал «broker» в качестве хоста, так как в документации рекомендуется подключать контейнеры по default-net, используя имя сервиса в docker-compose.

И это не работает. Также я пробовал использовать «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

Из ваших комментариев следует, что это проблемы с авторизацией доступа, а не с портами docker.
Сначала попробуйте curl из контейнера rabbit-mq. Из журнала видно, что curl не установлен в контейнере rabbit, поэтому установите его и попробуйте.
Затем попробуйте извне (со своей машины):
Просто сопоставьте порты в контейнере rabbit: "5672:5672" и "15672:15672".
curl localhost:5672 (или выполните docker inspect и curl напрямую на IP-адрес контейнера).

Образы построены из одного и того же базового образа? Возможно, у вас есть ufw в образе rabbit.
Также попробуйте выключить ufw на вашей машине и проверить (если он у вас есть)

Лучший способ взаимодействия между контейнерами в docker-compose — через сетевой мост, поэтому в конечном итоге вам придется использовать его.

Связанный контент