Невозможно связаться с докером контейнера на хосте Windows - PullRequest
0 голосов
/ 10 мая 2018

tl; dr Краткое описание проблемы:

  • Приложение успешно запускается в контейнере, привязывается к 127.0.0.1:8080 в контейнере и успешно обслуживает веб-запросы, но только в контейнере
  • docker ps -a подтверждает, что открыт порт 8080
  • Я не могу связаться с приложением с хоста, используя фактический IP-адрес контейнера, когда я запрашиваю http://[Container IP-адрес]: 8080
  • Хост работает под управлением Windows 10
  • Брандмауэр Windows полностью отключен для устранения неполадок

Для устранения неполадок я создал самое простое приложение для запуска в контейнере докеров, приложение F # / Suave, например:

open Suave
[<EntryPoint>]
let main args =

    startWebServer defaultConfig (Successful.OK "Hello World!")
    0

, которое отлично работает, возвращая простой "Hello World!"когда я запускаю его локально.

Чтобы контейнировать приложение, я следовал инструкциям в « Dockerize .NET Core application », который инструктирует мне запускать контейнер как

$ docker run -d -p 8080:80 --name myapp aspnetapp

Я не могу подключиться к «сайту» по адресу http://localhost:80 и http://localhost:8080,, что, по-видимому, является распространенной проблемой для пользователей Docker, работающих под Windows. Однако решение, которое, похоже, устранило эту проблему для всех остальных пользователей Windows в Интернете, запустив

docker inspect myapp

и затем нажав получившийся IP-адрес, также не работает. Я получаю:

enter image description here

Удар по обоим http://172.17.0.2:80 и http://172.17.0.2:8080 в Chrome дает мне «Сайт может»не может быть достигнут. "

Также стоит отметить, когда я запускаю

docker logs myapp

Единственная строка -

[17:43:21 INF] Smooth! Suave listener started in 73.476ms with binding 127.0.0.1:8080

Как я догадался, я также пытался

ipconfig

enter image description here

, а затем по IP-адресу адаптера Docker NAT, но это также приводит к недоступности сайта.

ОБНОВЛЕНИЕ :

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

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" myapp

, что для меня всегда дает:

Когда я запускаю ваниль

Docker проверяет myapp

, полученный JSON не структурирован точно так же, как рекомендуемый запрос.Я получаю узел bridge , но не узел nat :

enter image description here

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Попробуйте добавить следующие строки в файл Docker

ENV ASPNETCORE_URLS http://+:80 
EXPOSE 80 

Ссылка: https://www.sep.com/sep-blog/2017/02/20/hosting-asp-net-core-docker/

0 голосов
/ 11 мая 2018

Моему приложению в контейнерах нужно было слушать / привязывать 0.0.0.0 вместо 127.0.0.1.

0 голосов
/ 10 мая 2018

Ваше приложение сообщает, что оно привязано к localhost: 8080, но вы публикуете порт 80. Остановите контейнер и снова запустите:

docker run -d -p 8080:8080 --name myapp aspnetapp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...