Не удается подключиться к chocolatey.org или любому другому интернет-сайту из контейнера

12

xpost от https://forums.docker.com/t/cannot-connect-to-chocolatey-org/38745

Ожидаемое поведение

Я использую Windows Server 2016 Datacenter (загрузка MSDN) 64 бит - Версия 1607 - Сборка 14393.1715

Я использую Docker для Windows и запускаю контейнеры Windows.

Я полагаю, что это самая легкая вещь в мире, чтобы сделать это:

reboot my host machine
docker run -it microsoft/windowsservercore
powershell
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));

Ожидание для этого, чтобы установить шоколад в контейнере.

На самом деле я собираюсь делать это в докер-файле, но я собираюсь привести минимальный рабочий пример, чтобы получить помощь прямо сейчас.

Вот фактический файл докера, который терпит неудачу (это не так творчески, к сожалению)

FROM microsoft/windowsservercore

SHELL ["Powershell"]

ENV ChocolateyUseWindowsCompression false;
RUN iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));

Фактическое поведение

Перво-наперво: я запускаю это на виртуальной машине Virtualbox. Все остальное, с чем я хочу работать, работает, включая, но не ограничиваясь: внутреннее сетевое подключение и тесты, запущенный сервер sql, службы WCF, работающие в моей среде docker-compose, данные возвращаются правильно. Все, что я ожидаю от системы, работает. Это последний шаг, скрестив пальцы: D. Тот факт, что я запускаю это в VirtualBox, не должен иметь значения, так как Hyper-V работает, и все мои машины работают как положено. Я просто думаю, что стоит упомянуть.

docker run -it microsoft/windowsservercore
powershell
PS C:\> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
Exception calling "DownloadString" with "1" argument(s): "The remote name could not be resolved: 'chocolatey.org'"
At line:1 char:1
+ iex ((new-object net.webclient).DownloadString('https://chocolatey.or ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

PS C:\> ipconfig /all

Windows IP Configuration

   Host Name . . . . . . . . . . . . : 339189e8dd56
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No
   DNS Suffix Search List. . . . . . : attlocal.net

Ethernet adapter vEthernet (Container NIC 6412b757):

   Connection-specific DNS Suffix  . : attlocal.net
   Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #4
   Physical Address. . . . . . . . . : 00-15-5D-80-E9-2C
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::a51b:820e:e45d:fab6%29(Preferred)
   IPv4 Address. . . . . . . . . . . : 172.22.202.147(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . : 172.22.192.1
   DNS Servers . . . . . . . . . . . : 172.22.192.1
                                       10.0.2.2
   NetBIOS over Tcpip. . . . . . . . : Disabled

С моей операционной системы (Server 2016) у меня есть эта информация:

PS C:\docker> ipconfig /all

Windows IP Configuration

   Host Name . . . . . . . . . . . . : WIN-CDPNLUMSTOE
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No
   DNS Suffix Search List. . . . . . : attlocal.net

Ethernet adapter vEthernet (HNS Internal NIC) 2:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #2
   Physical Address. . . . . . . . . : 00-15-5D-80-E5-17
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::5939:52e7:aaf3:5b70%9(Preferred)
   IPv4 Address. . . . . . . . . . . : 172.22.192.1(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :
   DHCPv6 IAID . . . . . . . . . . . : 301995357
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-4E-0C-48-08-00-27-51-5F-6A
   DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS over Tcpip. . . . . . . . : Enabled

Ethernet adapter vEthernet (HNS Internal NIC) 3:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #3
   Physical Address. . . . . . . . . : 00-15-5D-B6-45-8D
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::1de4:bff7:36fb:ee92%13(Preferred)
   IPv4 Address. . . . . . . . . . . : 172.23.128.1(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :
   DHCPv6 IAID . . . . . . . . . . . : 570430813
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-4E-0C-48-08-00-27-51-5F-6A
   DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS over Tcpip. . . . . . . . : Enabled

Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : attlocal.net
   Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Desktop Adapter
   Physical Address. . . . . . . . . : 08-00-27-51-5F-6A
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::10de:923b:b866:221d%4(Preferred)
   IPv4 Address. . . . . . . . . . . : 10.0.2.15(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Lease Obtained. . . . . . . . . . : Friday, August 19, 1881 6:47:42 PM
   Lease Expires . . . . . . . . . . : Tuesday, September 26, 2017 11:15:59 PM
   Default Gateway . . . . . . . . . : 10.0.2.2
   DHCP Server . . . . . . . . . . . : 10.0.2.2
   DHCPv6 IAID . . . . . . . . . . . : 50855975
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-4E-0C-48-08-00-27-51-5F-6A
   DNS Servers . . . . . . . . . . . : 10.0.2.2
   NetBIOS over Tcpip. . . . . . . . : Enabled

Tunnel adapter isatap.{C420BD56-5715-49BF-9382-5EA99AA48563}:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Microsoft ISATAP Adapter #5
   Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes

Tunnel adapter isatap.{70EA4F39-FE0F-4040-B718-ACAC00765808}:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Microsoft ISATAP Adapter #6
   Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes

Tunnel adapter isatap.attlocal.net:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . : attlocal.net
   Description . . . . . . . . . . . : Microsoft ISATAP Adapter #7
   Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
PS C:\docker>

Информация

Вывод DockerDebugInfo.ps1: https://gist.github.com/jcolebrand/170673e45bf8a659552f22f2071c30d6

Системная информация

Запуск Windows Server Datacenter (загрузка MSDN) 64 бит - Версия 1607 - Сборка 14393.1715

PS C:\docker> docker version
Client:
 Version:      17.06.2-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   cec0b72
 Built:        Tue Sep  5 19:57:19 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.06.2-ce
 API version:  1.30 (minimum version 1.24)
 Go version:   go1.8.3
 Git commit:   cec0b72
 Built:        Tue Sep  5 19:59:47 2017
 OS/Arch:      windows/amd64
 Experimental: true

Если по какой-либо оставленной причине это важно, хост-ОС необходимо активировать. Я делаю это в среде однократных разработчиков, поэтому пока не особо беспокоился об активации виртуальной машины. Я не могу понять, как это важно. Тем более что все остальное "просто работает".

jcolebrand
источник
Похоже, что здесь есть похожая проблема github.com/docker/for-win/issues/427 Попробуйте остановить и запустить службу докера.
PrestonM
1
Спасибо @PrestonM, я делал это много раз. И перезагрузил компьютер. И get-netnat | remove-netnat
jcolebrand
Бег Stop-Service docker; Get-ContainerNetwork | Remove-ContainerNetwork -Force; Start-Service dockerпредставляет пару проблем. Служба с именем Docker не найдена. с Get-ContainerNetwork не найдено ни одной контейнерной сети
jcolebrand
откуда вы запускаете команду? Виртуалбокс или Windows Server?
PrestonM
1
@PrestonM Немного смущен. Позвольте мне повторить мои настройки: OSX Host -> VirtualBox -> Windows Server 2016 -> Docker для Windows -> контейнер. Стек работает на слоях Hyper-V, и я могу делать все остальное, что я спрашиваю о своих контейнерах, включая внутреннюю сетевую связь между приложениями и экземпляром локальной базы данных (microsoft / mssql-server-windows-developer), поэтому все, что я хочу делать хорошо. Команды выполняются в терминах powershell для контейнера. Server2016 может нормально выходить в интернет.
Jcolebrand

Ответы:

5

Похоже, проблема заключается в том, что образы Windows настраивают DNS в качестве шлюза по умолчанию для интерфейса NAT, а затем DNS хост-машины. DNS-запросы не срабатывают против первого распознавателя и внешнего доступа.

Добавление --dns 8.8.8.8(или ваш локальный распознаватель) к CLI, кажется, обходит проблему.

Стивен Муравски
источник
Это потрясающе. Кто может получить это в отставании для разрешения? : D
Jcolebrand
@jcolebrand Привет, я тоже сталкиваюсь с той же проблемой. У меня есть корпоративная конфигурация прокси. Куда нам нужно добавить эту конфигурацию DNS? В daemon.json?
user2301
Примерили ли вы команду, указанную в этом ответе?
Jcolebrand
@jcolebrand Попробовал docker build --dns 8.8.8.8 -t choco .не сработало. Тогда я добавил "dns": ["8.8.8.8"]в daemon.json не работает.
user2301
1
Я думал, что флаг DNS был запущен, а не при сборке?
Jcolebrand
2

Поскольку комментарии временны, вот некоторая информация для следующего человека, пытающегося решить эту проблему. Пожалуйста, не стесняйтесь редактировать этот ответ, чтобы предоставить более подробную информацию, если только вы не Docker для Windows Pro, в этом случае, пожалуйста, дайте лучший ответ: D

Я решил продемонстрировать проблему для своей ИТ-группы после того, как сменил сетевой адаптер на виртуальной машине на мостовой и добавил адаптер Thunderbolt. Поскольку существуют системы безопасности, я понял, что мне нужно добавить программное обеспечение безопасности в мою виртуальную машину, но, поскольку оно не присоединено к домену, это было проблемой. Переключение обратно на NAT на адаптере Wi-Fi, а затем демонстрация проблемы в моей виртуальной машине Windows 2016 каким-то волшебным образом заставила его начать работать.

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

Проверив Get-ContainerNetwork или Get-WinNat, не показывая ничего, я действительно был на моем конце диагностики. Смена адаптера NIC, а затем его замена, по-видимому, привели к сбросу. Хорошие времена.

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


И налог XKCD, для тех, кто не может решить проблемы.

XKCD Comic Ссылка на «Мудрость древних»

jcolebrand
источник
1
Согласно этому описанию, у меня возникает соблазн выставить счет в кеше DNS, очищаемом при закрытом / не закрытом сетевом стеке, так как в Windows есть такая идея для кеширования и отрицательного запроса. Если это случится снова, возможно, стоит попробовать ipconfig /flushdnsна хосте Windows
Tensibai
Нужно добавить, что хост в этом случае - OSX, если вы имеете в виду базовую ОС, на которой размещено все. Если вы имеете в виду, где я запускаю докер-контейнер, это окна.
Jcolebrand
Я имею в виду хост Windows, я не помню * сетевые стеки на базе nix, кеширующие отрицательные запросы
Tensibai
1

В командной строке запустите ipconfig /allи найдите DNS Serversстроку в выходных данных, похожую на IP-адрес. Это DNS-сервер (ы) вашего хост-компьютера.

Отредактируйте C:\ProgramData\Docker\config\daemon.jsonи добавьте dnsзапись с этим IP-адресом. Например, если ваш DNS-сервер 192.10.0.2 и 8.8.8.8 - это DNS от Google в качестве резервной копии:

{
    "dns": ["192.10.0.2", "8.8.8.8"]
}

Теперь перезапустите Docker Desktop, и удаленные URL-адреса могут быть разрешены Docker во время сборки или во время выполнения.

Это решение было получено от Faithful Anere по адресу https://medium.com/@faithfulanere/solved-docker-build-could-not-resolve-archive-ubuntu-com-apt-get-fails-to-install-anything-9ea4dfdcdcf2

sussexrick
источник
-1

Попробуйте инструкции по установке по адресу https://chocolatey.org/install#completely-offline-install (раздел «Установка через прокси-сервер»):

    @powershell -NoProfile -ExecutionPolicy Bypass -Command "[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
Валерий Кляйн
источник
1
Вы отвечаете на другой вопрос здесь, вопрос в том, почему контейнер не может разрешить интернет-адреса
Tensibai