Как я могу добавить записи DNS в файл hosts контейнера Windows?

У меня есть веб-сайт в IIS моего хост-компьютера, который доступен по адресу http://mysite.local. У меня также есть контейнер Windows, работающий на этом хосте, и я пытаюсь подключиться к этому веб-сайту из моего контейнера Windows, используя curl http: //mysite.local.

Я собираюсь добавить правильную запись DNS в файл hosts контейнера. Для этого я подключаюсь к командной оболочке контейнера и запускаю следующую команду:

echo 192.168.0.144 mysite.local >> c:\windows\system32\drivers\etc

Но на консоли отображается Доступ запрещен.

В общем, мой вопрос:

  • Как я могу добавить записи DNS в файл hosts контейнера Windows?

Я использую Docker Desktop version 2.3.0.4(46911), имея Engine version 19.03.12 на Windows 10.
Я создал контейнер, используя mcr.microsoft.com/windows/servercore:ltsc2019 в качестве базового образа Windows, также пробовал nanoserver:1903.


person Reza Aghaei    schedule 14.09.2020    source источник
comment
Можете ли вы настроить локальный DNS-сервер (например, dnsmasq или BIND на сервере Linux) или использовать облачный DNS-сервис, такой как Amazon Route 53? Это было бы намного проще поддерживать, чем вручную копировать записи в хост-файле.   -  person David Maze    schedule 14.09.2020
comment
Использование локального DNS-сервера может быть вариантом, однако среда разработки - это Windows 10, и у нее нет встроенного DNS-сервера, и я предпочитаю не полагаться на дополнительный сторонний инструмент в качестве зависимости. Также нельзя использовать настоящий облачный DNS-сервер, потому что это просто среда разработки. Я ожидал, что опция --add-host поможет, но, очевидно, он не работает для контейнеров Windows в момент.   -  person Reza Aghaei    schedule 14.09.2020


Ответы (1)


Вы можете получить командную оболочку контейнера от имени администратора и выполнить команду:

docker exec --user "NT AUTHORITY\SYSTEM" -it yourcontainername cmd

Затем вы можете добавить соответствующую запись в файл hosts контейнера:

echo X.X.X.X mysite.local >> c:\windows\system32\drivers\etc\hosts

Чтобы убедиться, что вы используете правильное значение вместо X.X.X.X, откройте файл hosts на вашем хост-компьютере, и вы увидите запись DNS, например X.X.X.X host.docker.internal. Это IP-адрес хоста с точки зрения контейнера. Используйте этот IP-адрес в приведенной выше команде, чтобы добавить правильную запись DNS в файл hosts контейнера. Чтобы проверить результат, вы можете просмотреть содержимое файла с помощью type c:\windows\system32\drivers\etc\hosts и получить содержимое с этого веб-сайта с помощью curl mysite.local.

person Reza Aghaei    schedule 14.09.2020