Поиск по сайту:

Как получить доступ к портам на хосте из контейнера Docker


Если вы подключаетесь к внешнему миру, Docker ведет себя так, как будто запрос исходит от хост-компьютера. Но если вы хотите получить доступ к процессам, запущенным на хосте, вашему брандмауэру может потребоваться дополнительная настройка.

Решение: добавьте правило брандмауэра для 172.18.0.0/16.

Если вы только что попытались получить доступ к процессу, запущенному на хост-компьютере, например к службе HTTP, вы могли быть заблокированы. Это связано с тем, что, несмотря на то, что контейнеры Docker работают на хосте, они используют некоторые специальные сети внутри, чтобы держать их логически разделенными, и из-за этого у них разные IP-адреса.

Вы можете увидеть это при запуске ifconfig, вы увидите свой стандартный сетевой интерфейс, а также интерфейс docker0 . По умолчанию Docker использует блок 172.18.0.0/16 для выделения IP-адресов контейнера.

Исправить это очень просто — откройте этот диапазон портов в брандмауэре. Запросы из диапазона IP-адресов, которые использует Docker, скорее всего, будут заблокированы. Это частный диапазон IP-адресов, поэтому риск его открытия минимален. Для UFW это будет:

sudo ufw allow from 172.18.0.0/24

Необязательное указание порта для открытия:

sudo ufw allow from 172.18.0.0/24 to any port 9200

Для iptables это будет:

iptables --append INPUT --protocol tcp --src 172.18.0.0/24 --jump DROP

Для служб управляемого хостинга, таких как AWS, вам может не потребоваться ничего менять — группы безопасности — это сетевые брандмауэры, которые находятся перед экземплярами и не должны влиять на внутренний трафик.