У меня проблемы с Docker и cURL.
У меня есть контейнер для компоновки Docker, установленный следующим образом:
app:
image: busybox
volumes:
- /home/ben/dev/dummy/www/:/data/www/
- /home/ben/dev/dummy/logs/:/data/logapache/
- /home/ben/dev/dummy/flux-entrants/:/data/flux-entrants/
nginx:
image: docker.dummy.fr/nginx
volumes_from:
- app
ports:
- 80:80
links:
- php
php:
image: docker.dummy.fr/actus-php
volumes_from:
- app
ports:
- 9000:9000
links:
- db
- nosql
db:
image: docker.dummy.fr/mysql-5.6
environment:
MYSQL_ROOT_PASSWORD: root
nosql:
image: docker.dummy.fr/lp-nosql
ports:
- "9200:9200"
Также есть директива extra_hosts, которую я убрал здесь из соображений конфиденциальности, но хосты настраиваются также в nginx (сопоставленном на порт 80, конечно) и в контейнерах /etc/hosts
Итак, nginx, php, mysql и elasticsearch находятся в отдельных контейнерах. Контейнер nginx связан с контейнером php, который связан с двумя другими. Это работает просто отлично, и никаких проблем с этим в частности.
Внутри этих контейнеров я запускаю два веб-приложения, как видно из дополнительных хостов: один клиент внешнего интерфейса (Symfony 2.8) и внутренний API ( также Symfony 2.8).
Теперь к проблеме.
Когда я пытаюсь связаться с API-приложением из-за пределов контейнера php, обычно это Postman, или cURL cli с моего терминала на моем Linux, или cURL из контейнера nginx , нет проблем.
Но когда переднее приложение (в том же контейнере) пытается связаться с приложением API или когда я пытаюсь выполнить curl из контейнера php , я получаю ошибки cURL «Отказано в соединении». Подробный режим показывает, что заголовок даже не отправляется.
Я думал, что это проблема сопоставления портов, но изменение портов, открытие новых и попытка подключения через эти порты также не работают.
Я попытался связаться с ним через порт 9000 (используется для nginx вверх по течению и открыт в docker-compose), но затем я получаю еще одну ошибку: «Ошибка получения: соединение сброшено узлом». Подробный режим показывает, что заголовки и запрос отправлены правильно, затем сервер разрывает соединение.
У кого-нибудь уже была эта проблема? Если да, то как вы это решили? Я искал здесь, но не смог найти ту же проблему.
Большое спасибо.
ИЗМЕНИТЬ:
Я только что попытался создать два отдельных набора контейнеров (один контейнер PHP + один контейнер Nginx) для каждого приложения (фронт и API), отдельно монтируя каждое приложение в свои собственные контейнеры, и у меня все еще есть та же проблема. Я просто не могу понять.