У меня следующая ситуация:
- Машина Работает Docker контейнеров, один из которых является веб-приложением, доступным через порт 9003 (с docker -compose и сетевым мостом по умолчанию). Упрощенно
docker-compose.yml
my-cant-do-http-service:
image: "the image"
ports:
- "${HOST_IP}:9003:9003"
- Машина B запускает веб-службу напрямую (без контейнеров) через порт 9006.
Машина B отправляет HTTP-запрос на приложение, работающее в контейнере, запущенном на компьютере A. Приложение, открытое из контейнера на компьютере A, получает запрос и записывает в журналы. Машина B успешно получает ответ.
То же приложение, работающее в контейнере на компьютере A, затем делает запрос к исходному приложению веб-службы на компьютере B. Этот запрос никогда не получен, и клиент HTTP сообщает о состоянии Код 0.
Если я открою терминал bash в контейнере на компьютере A и проверю содержимое /etc/resolv.conf, я вижу, что он имеет значение сервера имен 127.0.0.11. Но это не должно иметь значения, поскольку машины ссылаются друг на друга по IP-адресу, а не по имени хоста.
Таким образом, контейнер может принимать запрос через открытый порт и успешно отвечать. Но он не может установить прямое HTTP-соединение. Может ли кто-нибудь помочь мне понять, почему это так, и как я могу указать Docker (желательно через файл compose), чтобы разрешить HTTP-соединения? Я предполагаю, что сеть моста по умолчанию использует NAT только в одном направлении, но должен быть способ предоставить контейнеру шлюз.