Привязка портов контейнера Windows в Windows Server 2016 не работает
3236
Mathias Conradt
Я бегу Контейнер для Windows на хосте Windows, (Windows Server 2016 ТР4) .
Контейнер должен запускать веб-сервер IIS на внутреннем порту 80, и я также хочу привязать порт 80 к хосту, чтобы я мог связаться с ним через IP / URL хоста.
Я попробовал оба подхода через Powershell и Docker, и в обоих случаях привязка порта к хосту не работает.
========================= Powershell подход ======================= ===
Развертывание хоста контейнера в существующей системе (Windows Server 2016 TP4)
PS C:> wget -uri https://aka.ms/tp4/Install-ContainerHost -OutFile C:\Install-ContainerHost.ps1 PS C:> powershell.exe -NoProfile C:\Install-ContainerHost.ps1 Querying status of Windows feature: Containers... Feature Containers is already enabled. Waiting for Hyper-V Management... Networking is already configured. Confirming configuration... Getting Container OS image (NanoServer) version 10.0.10586.0 from OneGet (this may take a few minutes)... Container base image install complete. Querying container images... OS image (NanoServer) is already installed. The following images are present on this machine: ContainerImage (Name = 'NanoServer') [Publisher = 'CN=Microsoft', Version = '10.0.10586.0'] ContainerImage (Name = 'WindowsServerCore') [Publisher = 'CN=Microsoft', Version = '10.0.10586.0'] Docker is already installed. Stopping Docker... Starting Docker... Tagging new base image (8572198a60f1)... Base image is now tagged: nanoserver 10.0.10586.0 8572198a60f1 5 months ago 0 B nanoserver latest 8572198a60f1 5 months ago 0 B Script complete!
Подготовка образа и контейнера с IIS (на основе образа WindowsServerCore)
Добавление сопоставления портов и правила брандмауэра:
PS C:\> if (!(Get-NetNatStaticMapping | where {$_.ExternalPort -eq 80})) PS C:\> if (!(Get-NetFirewallRule | where {$_.Name -eq "TCP80"}))
Теперь, когда я добавил сопоставление портов (и правило брандмауэра), я должен иметь возможность подключаться к IIS через мой хост. (Просто чтобы быть уверенным, я полностью отключил брандмауэр на хосте.)
В конце концов, я могу достичь IIS только через IP-адрес контейнера, а не через IP-адрес хоста.
Я использую Docker версии 1.10.0-dev, сборка 18c9fe0.
Билеты, созданные в Docker https://github.com/docker/docker/issues/21558 и документация по виртуализации Microsoft: https://github.com/Microsoft/Virtualization-Documentation/issues/181
Mathias Conradt 8 лет назад
0
Я могу воспроизвести проблемы @mathiasconradt. Играл с приложением для голосования на прошлой неделе с TP4, у меня есть тот же обходной путь: открытие портов брандмауэра на хосте, открытие URL веб-сервера с IP-адресами контейнера. Не могу дождаться, чтобы проверить приложение для голосования на TP5.
В ожидании TP5 ... тем временем я использую Apache httpd на хосте для обработки переадресации портов.
TP5 должен быть доступен примерно через 7 часов, не так ли?
Falco Alexander 8 лет назад
0
@FalcoAlexander Я не знаю, откуда ты взял эту информацию? Также интересует дата выхода. Я погуглил по нему, увидел https://twitter.com/wzornet/status/701532616839847937 который уже пройден.
Mathias Conradt 8 лет назад
0
Конференция Build 2016 (в SF) стартует через 7 часов. обычно это событие для распространения новых релизов. Я предполагаю: VisualStudio и TFS 2015 Update 2, новая Windows 10 Release 1603 и Server 2016 TP5.
Falco Alexander 8 лет назад
1
мои плохие ... неправильные спекуляции ...: /
Falco Alexander 8 лет назад
0
0
harrymc
Note: Finally this is found to be a bug in Windows Server 2016 TP4 that causes the behavior described below (see the comments). Even though the Docker Daemon is supposedly installed, the client seems to be used instead with all the limitations described below. This bug may be fixed in the future TP5.
This is a limitation of the Docker implementation on Windows, where you cannot connect to the container through the host.
The reason you're having this, is because on Linux, the docker daemon (and your containers) run on the Linux machine itself, so "localhost" is also the host that the container is running on, and the ports are mapped to.
On Windows (and OS X), the docker daemon, and your containers cannot run natively, so only the docker client is running on your Windows machine, but the daemon (and your containers) run in a VirtualBox Virtual Machine, that runs Linux.
To connect to the container, you must connect to the IP-address of the virtual machine, not of your Windows computer.
I'm going to close this issue, because this is not a bug, and explained in the documentation. I hope the above explanation helps you.
Спасибо за ссылку, но связанный билет GitHub относится к Windows 7 (или любому Windows Server до Windows 2016), а в ответе на билет говорится: «В Windows (и OS X) демон docker и ваши контейнеры не могут работать в исходном режиме. , поэтому на вашем компьютере с Windows работает только докер-клиент, но демон (и ваши контейнеры) работают на виртуальной машине VirtualBox, на которой работает Linux. "; это справедливо для Windows7, но не должно иметь место для Windows 2016, где контейнеры могут работать изначально.
Mathias Conradt 8 лет назад
1
Также обратите внимание на комментарий thaJeztah на странице github, на которую вы ссылаетесь: «Идет работа над собственным Docker Engine на Windows Server 2016, но этот механизм будет запускать только приложения Windows, а не Linux» <- это то, что я пытаюсь делай и используй.
Mathias Conradt 8 лет назад
1
Но вы спрашиваете о Docker, который не разработан Microsoft. Для бесшовной интеграции с Windows вы должны использовать технологию Windows, то есть контейнеры Windows и контейнеры Hyper-V, а не Docker.
harrymc 8 лет назад
0
Я знаю, что Docker не разработан MS, я использую его для Linux Containers без проблем. Согласно документации Microsoft, Docker должен работать на Win2016 так же, как контейнеры Windows. Я явно избегаю Hyper-V, чтобы между ними не было виртуальной машины. Я попробую подход Windows Containers, но предпочел бы использовать Docker, поскольку я использую его и вне мира Windows.
Mathias Conradt 8 лет назад
0
Различия наверняка исчезнут в будущем. Текущую ситуацию см., Например, в этой статье: [Docker Engine для Windows Server 2016] (https://www.sumologic.com/2015/11/05/docker-engine-for-windows-server/). Я предполагаю, что Microsoft должна стремиться к полной интеграции с Docker, возможно, даже в выпускной версии WS2016.
harrymc 8 лет назад
0
Спасибо за ссылку на статью. Теперь я попробовал подход, используя powershell вместо docker, следуя пошаговой документации, но все же не повезло. Смотрите мое обновление выше («ОБНОВЛЕНИЕ (Использование powershell вместо Docker)»)
Mathias Conradt 8 лет назад
0
Как ни странно, одному парню удалось сделать это уже с PowerShell в WS2016 TP3. Смотрите его [пошаговый аккаунт] (http://www.aidanfinn.com/?p=18911). Вы можете попытаться скопировать именно его команды.
harrymc 8 лет назад
0
Я следовал за шагами в своей статье. Это все еще не работает. Тем не менее, следует упомянуть одну вещь: у него, похоже, другие диапазоны IP-адресов его виртуального коммутатора vEthernet (и Ethernet0), чем у меня. Не уверен, что это из-за TP3 против TP4. В своем блоге он написал: «Примечание. В этот момент создается хост виртуальной машины с работающим виртуальным коммутатором NATing с диапазоном IP-адресов 192.168.250.0/24», но по умолчанию MS-Install-ContainerHost.ps1 обычно устанавливает виртуальный коммутатор. Диапазон IP-адресов до 172.16.0.0/16. Вроде поменял местами, если только он не изменил конфигурацию по умолчанию, меня немного смущает. Оставил ему комментарий под своей статьей.
Mathias Conradt 8 лет назад
0
Конечно, я запускал команды в его статье, адаптированные к моим IP-адресам и т. Д. Без успеха :(
Mathias Conradt 8 лет назад
0
Кстати, сервис демона Docker запущен?
harrymc 8 лет назад
0
Да, демон Docker работает как служба. Кстати: когда я попробовал Docker, я следовал инструкциям из документации MS, и я просто вижу, что статья последний раз обновлялась вчера, 27.03., поэтому для TP4 должно быть допустимо использовать Docker описанным там способом. https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/manage_docker
Mathias Conradt 8 лет назад
0
Я пробовал tp4 на виртуальной машине, но застрял из-за отсутствия поддержки виртуализации. Насколько я вижу, это должно работать на физической машине. Вы можете попытать счастья в [форуме по контейнерам Windows] (https://social.msdn.microsoft.com/Forums/en-US/home?forum=windowscontainers), где может ответить инженер MS. Если вы это сделаете, я предлагаю вам значительно уменьшить ваш вопрос, просто перечислив команды PowerShell и их результаты. Кстати - вы пытались telnet для хоста: 8080?
harrymc 8 лет назад
0
Я упростил свой пост и просто пошагово выводил результаты моего подхода PowerShell. Я также проверю форум Windows Container Forum; Ранее я уже нашел ошибку в контейнере Windows, касающуюся другой проблемы, о которой я сообщил, и которая была одобрена одним из инженеров MS. Может быть, это еще один. Telnet: у меня нет команды `telnet`, я сделал` wget`, см. Обновленную запись (невозможно подключиться к удаленному серверу). Я также отправил два билета в github Docker и MS Virtualization, возможно, я тоже получу ответ.
Mathias Conradt 8 лет назад
0
Это действительно может быть регрессия TP4, по крайней мере, сетевая кодовая база была перемещена - см. Комментарий здесь: https://github.com/docker/docker/issues/21558#issuecomment-202165532. Я думаю, я буду ждать TP5 или ответа от команды Docker / MS. А пока я буду использовать Apache httpd на хосте в качестве обратного прокси-сервера и переадресовывать через него порт. Это должно сделать то, что я пытаюсь достичь.
Mathias Conradt 8 лет назад
0
Стефан Шерер из команды Docker смог воспроизвести мою проблему на TP4: https://github.com/docker/docker/issues/21558#issuecomment-202536462
Mathias Conradt 8 лет назад
0
Я думаю, у вас есть хороший шанс, что это будет работать правильно в ближайшем будущем. Контейнеры - захватывающий предмет, даже если еще не совсем зрелый.
harrymc 8 лет назад
0
До сих пор контейнеры работали с Ubuntu нормально, только на Win2016 встроенная поддержка довольно нова. Но, безусловно, отличная помощь для развертывания приложений. Ждем финального релиза. Спасибо за вашу помощь относительно моего вопроса.
Mathias Conradt 8 лет назад
0
Вы можете взглянуть на [WinDocks] (http://www.windocks.com/).
harrymc 8 лет назад
0
Спасибо за ссылку. Веб-сайт / проект не кажутся мне слишком заслуживающими доверия (за этим нет никакой официальной организации, веб-сайт выглядит немного старомодным, в своих документах они ссылаются на Docker 1.7 - текущая версия 1.11). Проблема с портами не так критична, я бы предпочел придерживаться официальных документов Docker и Microsoft. Не чувствует, что WinDock будет долго.
Mathias Conradt 8 лет назад
0