Я пытаюсь подключить веб-приложение, развернутое в одном контейнере, к 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 — через сетевой мост, поэтому в конечном итоге вам придется использовать его.