Docker — контейнер Windows не разрешает хосты

Я создал два новых проекта в Visual Studio с помощью инструментов Docker. Первый — это сайт asp.net, работающий с контейнером Linux. Второй — это сайт asp.net, работающий с контейнером Windows.

В первом случае я могу пропинговать имена хостов (например, google.com), и все отлично решается.

пингование из контейнера linux

Однако при запуске контейнера Windows я не могу сделать то же самое.

сведения о сети Windows и проверка связи из контейнера Windows

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

docker network create --driver=nat --subnet=192.168.221.0/24

Чтобы было ясно, я могу нормально пинговать, используя IP, но поскольку я хочу подключиться к базе данных через имя хоста, это не особенно полезно во время разработки.


person Killnine    schedule 16.08.2018    source источник
comment
Вы когда-нибудь понимали это?   -  person Kierk    schedule 23.09.2020
comment
К сожалению нет. В итоге я стал поддерживать только контейнеры на базе Linux. Я работаю в корпоративной системе с прокси-сервером и использую VPN, поэтому есть много других вещей, которые могут вызывать проблемы. Хотя очень расстраивает, что не нашел решения.   -  person Killnine    schedule 23.09.2020
comment
Я только что заставил свой контейнер Windows работать. Предоставим ответ   -  person Kierk    schedule 23.09.2020


Ответы (1)


Я только что понял это. Требуется переключение на контейнер Windows в Docker Desktop.

1). Подпишитесь: https://docs.docker.com/machine/drivers/hyper-v/#example:

2). Запустите Hyper v (может потребоваться включить): https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v

3). Затем в Hyper V создайте внешний виртуальный свитч. Выберите адаптер Wi-Fi. (должен работать с включенным или выключенным vpn).

4). перезагрузка.

5). Я использовал эти изображения, так как они должны соответствовать моей локальной версии Windows 10: 1809.

docker pull mcr.microsoft.com/windows:1809   #takes an hour to finish

6). Запустите контейнер и подключитесь к новой сети.

docker run -dit --name win1809 mcr.microsoft.com/windows:1809 powershell
docker network ls
docker network connect "John Windows Container Switch" win1809
docker network inspect "John Windows Container Switch"

показывает:

        "Containers": {
            "b8c4ae07761fdf082602f836654013b8d83a717cce9156880a80c7542d855842": {
                "Name": "win1809",
                "EndpointID": "e84652fc93fd1fa2970c3bdcad513d8928fc35823a9f8cf0e638926b6091a60c",
                "MacAddress": "00:15:5d:fb:77:dd",
                "IPv4Address": "",
                "IPv6Address": ""

7). Подключитесь к контейнеру и пропингуйте что-нибудь:

docker exec -it win1809 powershell
ping www.google.com

Pinging www.google.com [172.217.10.36] with 32 bytes of data:
Reply from 172.217.10.36: bytes=32 time=19ms TTL=118
Reply from 172.217.10.36: bytes=32 time=18ms TTL=118
Reply from 172.217.10.36: bytes=32 time=18ms TTL=118
Reply from 172.217.10.36: bytes=32 time=14ms TTL=118
person Kierk    schedule 23.09.2020
comment
я не могу принять это как ответ, учитывая, что он кажется довольно правдоподобным. В настоящее время у меня нет контейнеров Windows для тестирования, поэтому я не могу проверить их независимо. Но вроде разумно. Я попробую и протестирую позже. - person Killnine; 23.09.2020