Контейнер Windows не может получить доступ к Интернету

#docker #docker-for-windows #docker-networking #windows-container

#docker #docker-для-Windows #docker-сеть #windows-контейнер

Вопрос:

При запуске контейнеров на базе Windows я не могу получить доступ к Интернету изнутри. Пример:

С моего хост-компьютера я могу выполнить следующую команду:

 PS C:Developer> nslookup aka.ms
Server:  cache100.ns.tdc.net
Address:  193.162.153.164

Non-authoritative answer:
Name:    aka.ms
Address:  88.221.62.148
  

Когда я пытаюсь сделать это изнутри контейнера:

 PS C:Developer> docker run mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 powershell nslookup aka.ms
*** UnKnown can't find aka.ms: Server failed
Server:  UnKnown
Address:  172.28.112.1
  

Хотя меня конкретно не интересует aka.ms , эта ошибка возникает для всех служб, к которым я пытаюсь подключиться, поэтому я не могу установить внешние библиотеки и т.д.

Я использую Docker Desktop версии 19.03.12. Поведение происходит независимо от того, включен ли у меня WSL 2 или нет, и все настройки Docker установлены по умолчанию.


Примечание: некоторое время назад я столкнулся с таким поведением. Тогда я добавил следующий фрагмент в свой Dockerfile:

 RUN powershell -command certutil -generateSSTFromWU roots.sst amp;amp; certutil -addstore -f root roots.sst amp;amp; del roots.sst
  

Насколько я понимаю, это установило бы сертификат SSH, который решил проблему. Однако теперь эта команда завершается ошибкой:

 PS C:> certutil -generateSSTFromWU roots.sst
The server name or address could not be resolved 0x80072ee7 (WinHttp: 12007 ERROR_WINHTTP_NAME_NOT_RESOLVED) -- http://ctldl.windowsupdate.com/msdownload/update/v3/static/truste
dr/en/authrootstl.cab
CertUtil: -generateSSTFromWU command FAILED: 0x80072ee7 (WinHttp: 12007 ERROR_WINHTTP_NAME_NOT_RESOLVED)
CertUtil: The server name or address could not be resolved
  

Ответ №1:

Я протестировал это на базовом образе ядра сервера, и я получил его, добавив настройки DNS.

Я подключился к контейнеру в интерактивном режиме, чтобы проверить это, но, вероятно, вы также можете добавить команду в DockerFile.

контейнер docker run -it powershell

Введите netsh, чтобы начать настройку сети
Сначала мы ищем сеть, которую хотим изменить
(в моем случае «Ethernet 2»)
, Затем мы добавляем статический DNS-сервер к этому интерфейсу

 interface ip show config  
interface ipv4 set dns name="Ehternet 2" static 8.8.8.8  
exit
  

nslookup aka.ms

 S C:> nslookup aka.ms
Server:  dns.google
Address:  8.8.8.8

Non-authoritative answer:
Name:    aka.ms
Address:  23.38.17.26
  

Ссылка на сеть Docker
Справочная инструкция

Комментарии:

1. Работает. Огромное спасибо! 🙂