localhost не работает в докере windows 10

Я использую поддержку докеров VS2017. VS создал для меня DockerFile, и когда я создаю файл для создания докеров, он создает контейнер и запускает приложение на IP-адресе 172.x.x.x. Но я хочу запустить свое приложение на локальном хосте.

Я делал много вещей, но ничего не получалось. Следовал документам docker в качестве starter и создание примера приложения Microsoft . Вторая ссылка работает отлично, но я получаю ошибку HTTP 404, когда пытаюсь использовать первую ссылку.

Любая помощь приветствуется.


person Usama Saleem    schedule 30.10.2017    source источник
comment
Вот как работает Docker. Каждый контейнер получает свой внутренний адрес. Если вы хотите получить доступ к внутренней службе, используя локальный порт, вы предоставляете его с помощью параметра -p , например, -p 18000:80 предоставит доступ к веб-приложению в 127.0.0.1:80. Для уточнения опубликуйте параметры, которые вы использовали для создания контейнера.   -  person Panagiotis Kanavos    schedule 30.10.2017
comment
Голосующие, помните, когда вы пытались создать свой первый веб-сайт, работающий на этой новой штуке под названием Docker? Как долго вы пытались узнать, как с ним поговорить?   -  person Panagiotis Kanavos    schedule 30.10.2017
comment
Укажите версии Windows и Docker, которые вы используете, а также параметры командной строки, которые вы использовали. Не Windows 10, а, например, 10.0.16299.15. Вы можете получить это, набрав ver в командной строке. Для докера: docker version. Вы уже запускаете что-то на порту 80? Возможно, IIS с сайтом по умолчанию? Пробовали ли вы изменить перенаправляемый порт, например, на 18000 с -p 18000:80 и подключиться к localhost:18000 ?   -  person Panagiotis Kanavos    schedule 30.10.2017
comment
Версия Docker 17.09.0-ce, сборка afdb6d4 и Windows 10 pro версии 10.0.15063... Раньше я указывал порт 5000:80, но ничего не работает... Поэтому я сбросил докер по умолчанию, и теперь он работает с контейнером linux , ранее я работал над контейнером Windows, руководствуясь сайтом Microsoft   -  person Usama Saleem    schedule 30.10.2017
comment
В контейнерах Windows нет ничего плохого. Контейнеры Linux предназначены для приложений Linux. Что именно это nothing works вы пробовали? Что касается учебника, вам больше не нужны эти шаги, шаблоны VS уже предоставляют поддержку Docker. Вы можете просто создать новое веб-приложение из шаблона и запустить его.   -  person Panagiotis Kanavos    schedule 30.10.2017


Ответы (2)


Чтобы получить доступ к примеру, опубликованному в Docker Docs, который, как вы указали, не работает, выполните следующие действия:

1 — перечислить все запущенные контейнеры докеров

docker ps -a

После запуска этой команды вы сможете просмотреть все ваши контейнеры Docker, которые в настоящее время запущены, и вы должны увидеть там контейнер с именем webserver, если вы правильно следовали примеру документации Docker.

2 - Получите IP-адрес, на котором работает ваш контейнер webserver. Для этого выполните следующую команду.

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

Теперь вы должны получить IP-адрес, на котором работает контейнер webserver, надеюсь, вы знакомы с этим шагом, поскольку он был даже доступен в примере сборки примера приложения Microsoft, который вы приложили к вопросу.

Получите доступ к IP-адресу, который вы получите после выполнения вышеуказанной команды, и вы должны увидеть желаемый результат.

Отвечая на ваш первый вопрос (доступ к контейнеру докеров с локальным хостом в докере для окон), на хосте Windows вы не можете получить доступ к контейнеру с локальным хостом из-за ограничения в сетевом стеке NAT по умолчанию. Более подробное объяснение этой проблемы можно получить, посетив этот ссылка. Похоже, что документация по докеру еще не обновлена, но эта проблема существует только на хостах Windows.

Сообщается также об этой проблеме. Перейдите по этой ссылке. чтобы увидеть это.

Надеюсь, что это помогает вам.

ИЗМЕНИТЬ

Похоже, что решение этой проблемы появится в будущем выпуске Windows. Тем не менее, этот выпуск выходит, это ограничение доступно в хосте Windows. Перейдите по этой ссылке -> https://github.com/MicrosoftDocs/Virtualization-Documentation/issues/181

person Ravindu Fernando    schedule 30.10.2017
comment
Это старая проблема. Я использую SQL Server внутри контейнера с переадресацией портов и прекрасно подключаюсь через localhost - person Panagiotis Kanavos; 30.10.2017
comment
Возможно это из-за старой версии. В примере документации докера, который упоминался в вопросе, четко указаны все шаги, и отказ в этом примере для доступа через локальный хост произойдет только из-за вышеуказанной проблемы. - person Ravindu Fernando; 30.10.2017
comment
Это также произойдет, если на порту 80 запустится что-то еще, например веб-сайт IIS по умолчанию или любой другой развернутый веб-проект. Docker не будет жаловаться, если порт уже занят - person Panagiotis Kanavos; 30.10.2017
comment
Да согласен с этим - person Ravindu Fernando; 30.10.2017
comment
спасибо за ответ ... Я искал глубоко и получил ответ. Я переключился на контейнер Windows, следуя руководству Microsoft, поэтому он сопоставился с 172.x.x.x , теперь я снова переключился на контейнер Linux, и все работает нормально. - person Usama Saleem; 30.10.2017
comment
@UsamaSaleem, это не решение. В контейнерах Windows нет ничего плохого. Если вам нужен контейнер Linux для вашего приложения, это означает, что вы создаете приложение Llinux. - person Panagiotis Kanavos; 30.10.2017
comment
@UsamaSaleem, не могли бы вы указать версии Windows и Docker, которые вы используете, а также параметры командной строки, которые вы использовали, как ранее упоминал Панайотис. Так мы сможем найти реальную проблему, стоящую за вашей проблемой. - person Ravindu Fernando; 30.10.2017
comment
Docker версии 17.09.0-ce, сборка afdb6d4 и Windows 10 pro версии 10.0.15063 .... и параметры командной строки -d -p --name и т. д. из руководства - person Usama Saleem; 30.10.2017
comment
@UsamaSaleem есть ли какое-либо другое приложение, работающее на порту 80 на вашем хосте Windows? На каком порту работает сервер IIS? - person Ravindu Fernando; 30.10.2017
comment
@RavinduFernando не удалось найти - person Usama Saleem; 30.10.2017
comment
@UsamaSaleem попробуй и расскажи! knowledge.autodesk.com/support/vault-products/troubleshooting/ - person Ravindu Fernando; 30.10.2017
comment
По умолчанию он работает на порту 80. Поэтому лучше всего использовать переадресацию портов. Попробуйте docker run -d -p 5000:80 --name webserver nginx вместо команды docker run, предоставленной в документации по докеру, и получите к ней доступ через localhost :5000 - person Ravindu Fernando; 30.10.2017
comment
@UsamaSaleem Обратитесь к ответу Панайотиса на этот вопрос, чтобы понять, что на самом деле происходит, если вам все еще неясно. - person Ravindu Fernando; 30.10.2017
comment
@UsamaSaleem Я обновил ответ ссылкой на проблему, которую вы предоставили - person Ravindu Fernando; 06.11.2017

Скорее всего, на порту 80 уже запущено другое приложение. Вам придется перенаправить свой веб-сайт на другой порт, например:

docker run -d -p 5000:80 --name myapp myasp

И укажите в браузере http://localhost:5000.

Когда вы запускаете контейнер, вы указываете, какие внутренние порты будут отображаться как порты на хосте с помощью параметра -p. -p 80:80 открывает внутренний порт 80, используемый веб-сайтами, для порта 80 хоста.

Однако Docker не будет жаловаться, если другое приложение уже прослушивает 80-й порт, например IIS, другое веб-приложение или любой инструмент с веб-интерфейсом, который по умолчанию работает на 80-м порту.

Решение состоит в следующем:

  1. Убедитесь, что больше ничего не работает на порту 80 или
  2. Перенаправить на другой порт.

Переадресация на другой порт намного проще.

Чтобы убедиться, что вы можете подключиться к порту, используйте команду telnet, например:

telnet localhost 5000

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

PS Я столкнулся с этим всего неделю назад, когда пытался настроить контейнер SQL Server для тестов. Я уже запускаю 1 экземпляр по умолчанию и 2 именованных экземпляра, и docker вообще не жаловался, когда я пытался создать контейнер. Мне потребовалось время, чтобы понять, что было не так.

person Panagiotis Kanavos    schedule 30.10.2017
comment
Я следовал вашим командам, но получил это при подключении к локальному хосту -> Этот сайт недоступен, кроме того, я запустил команду telnet на 80 и получил пустое окно (сервер работает), затем я запустил на 5000 и получил «Может». не открытое соединение с хостом, на порту 5000 - person Usama Saleem; 31.10.2017
comment
@RavinduFernando Я не могу, это то, что я пытался исправить. Я могу получить к нему доступ только через IP-адрес с NAT ... Я нашел этот ответ, связанный с моей проблемой .. github.com/MicrosoftDocs/Virtualization-Documentation/issues/ прочитать последний комментарий - person Usama Saleem; 01.11.2017
comment
@UsamaSaleem, значит, ответ, который я добавил, все еще действителен? - person Ravindu Fernando; 01.11.2017
comment
согласно моим исследованиям, да. но если у кого-то есть другие идеи или мнения, я здесь и рад применить. - person Usama Saleem; 01.11.2017