Подтвердить что ты не робот

Открыть контейнерный порт для хоста с помощью Docker для Windows в Windows 10

Я читаю API докеров и пытается создать простой контейнер и выставить 1 порт.

В моем примере у меня есть приложение, которое прослушивает TCP порт 9595 внутри контейнера, и я хочу получить к нему доступ из внешнего мира (то есть узла контейнера) на порт 9090.

При создании контейнера у меня есть "ExposedPorts": { "9595/tcp: {}" } и "PortBindings": { "9595/tcp": [{ "HostPort": "9090" }] }.

Итак, если я получаю доступ с Host machine http://container_internal_ip:9595, он работает! Однако, когда я получаю доступ к http://localhost:9090, что я ожидаю от использования этой функции карты порта, она не работает...

При запуске docker port containerID у меня есть 9595/tcp -> 0.0.0.0:9090, и это должно означать, when connecting to any IP on the host, at port 9090, forward to the container in port 9595.

Итак, что здесь не так? Почему я не могу подключиться к 9090?

Я ценю любые разъяснения.

4b9b3361

Ответ 1

Пожалуйста, отправьте команду docker, которую вы используете.

Вам нужно специальное лечение, если вы используете Docker Toolbox или Docker для Windows. Вы должны увидеть localhost без проблем (если ваш контейнер Linux). Если вы хотите, чтобы ваш контейнер был виден снаружи, попробуйте сделать это с помощью повышенной силовой оболочки:

netsh interface portproxy add v4tov4 listenaddress=yourip listenport=9090 connectaddress=10.0.75.1 connectport=9090

Если ваш контейнер - Windows, но вы не увидите localhost, и вам нужно использовать внутренний адрес контейнера:

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <cointainerid>

Ссылка: https://blog.docker.com/2016/09/build-your-first-docker-windows-server-container/

Привет

Ответ 2

Порт действительно подвергается воздействию "внешнего мира", как и ожидалось, он просто недоступен для самого хост-компьютера контейнера на интерфейсе loopback (localhost или 127.0.0.1) из-за ограничений в сети Windows. Вместо того, чтобы пытаться получить к нему доступ через интерфейс loopback на хосте контейнера, попробуйте получить доступ к нему с другого компьютера в сети, используя IP-адрес контейнера и контейнерный номер порта.

Есть хорошая запись для этого на https://blog.sixeyed.com/published-ports-on-windows-containers-dont-do-loopback/