#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
Комментарии:
1. Работает. Огромное спасибо! 🙂