Нет Интернета изнутри локального сервисного сетевого контейнера

Я играю с Service Fabric Mesh на своем локальном ПК, но я борюсь с доступом в Интернет из контейнера (Windows).

Я использую стандартный шаблон веб-приложения из Visual Studio 2017:

public static async Task<int> Main(string[] args)
    {
        try
        {
            var test = await (new System.Net.Http.HttpClient()).GetStringAsync("http://google.com");
            Console.WriteLine(test);

Вы ожидаете, что какой-то HTML будет напечатан, но я получаю следующее исключение:

System.Net.Http.HttpRequestException: такой хост не известен ---> System.Net.Sockets.SocketException: такой хост не известен в System.Net.Http.ConnectHelper.ConnectAsync(строковый хост, порт Int32, CancellationToken cancellationToken) --- Конец внутренней трассировки стека исключений --- в System.Net.Http.ConnectHelper.ConnectAsync(строковый хост, порт Int32, CancellationToken cancellationToken) в System.Threading.Tasks.ValueTask`1.get_Result() в System.Net.Http.HttpConnectionPool.CreateConnectionAsync(запрос HttpRequestMessage, CancellationToken cancellationToken) в System.Threading.Tasks.ValueTask`1.get_Result() в System.Net.Http.HttpConnectionPool.Task.ask ValueTask`1.get_Result () в System.Net.Http.HttpConnectionPool.SendWithRetryAsync(запрос HttpRequestMessage, Boolean doRequestAuth, CancellationToken cancellationToken) в System.Net.Http.RedirectHandler. onToken) в System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, запрос HttpRequestMessage, cts CancellationTokenSource, логические disposeCts) в System.Net.Http.HttpClient.GetStringSain1 (WebSync1. GetSync.1.AsC). Строка [] args)

Базовый образ докера используется microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-1709 и если я бегу:docker run microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-1709 ping google.comтогда я получаю:

PS C:\Windows\system32> docker run microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-1709 ping google.com

Pinging google.com [172.217.168.238] with 32 bytes of data:
Reply from 172.217.168.238: bytes=32 time=16ms TTL=56
Reply from 172.217.168.238: bytes=32 time=15ms TTL=56
Reply from 172.217.168.238: bytes=32 time=15ms TTL=56
Reply from 172.217.168.238: bytes=32 time=16ms TTL=56

Ping statistics for 172.217.168.238:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 15ms, Maximum = 16ms, Average = 15ms

Что я делаю неправильно?

Обновление 1:

Когда я запускаю образ Docker напрямую, я получаю:

PS C:\Users\XXX> docker run microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-1803 ipconfig.exe /all

Windows IP Configuration

   Host Name . . . . . . . . . . . . : XXX
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No
   DNS Suffix Search List. . . . . . : XXX

Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : XXX
   Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
   Physical Address. . . . . . . . . : 00-15-5D-38-EE-09
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::1c14:1ec3:9b85:5f56%4(Preferred)
   IPv4 Address. . . . . . . . . . . : 172.20.192.4(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . : 172.20.192.1
   DHCPv6 IAID . . . . . . . . . . . : 67114333
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-23-7C-13-F1-00-15-5D-38-EE-09
   DNS Servers . . . . . . . . . . . : 172.20.192.1
                                       10.10.0.184 <-- IP of my local machine
                                       10.10.0.1 <-- My router
   NetBIOS over Tcpip. . . . . . . . : Disabled

Если я сделаю то же самое (System.Diagnostics.Process.Start("ipconfig.exe", "/all");) внутри кода, запущенного в Service Fabric:

Windows IP Configuration

   Host Name . . . . . . . . . . . . : 0ded1f75fa51
   Primary Dns Suffix  . . . . . . . : 
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No
   DNS Suffix Search List. . . . . . : Application1

Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : XXX
   Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
   Physical Address. . . . . . . . . : 00-15-5D-38-E5-2C
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::1d25:4204:2cd4:1bb0%4(Preferred) 
   IPv4 Address. . . . . . . . . . . : 172.20.202.176(Preferred) 
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . : 172.20.192.1
   DHCPv6 IAID . . . . . . . . . . . : 67114333
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-23-7C-11-32-00-15-5D-38-E5-2C
   DNS Servers . . . . . . . . . . . : 172.20.192.1
                                       10.10.0.184
   NetBIOS over Tcpip. . . . . . . . : Disabled

Как вы можете видеть 10.10.0.1 (мой маршрутизатор / шлюз отсутствует в качестве DNS-сервера в последнем дампе). Как мне это добавить?

1 ответ

Вам нужно добавить команду EXPOSE в начало dockerfile, это известная ошибка, т.е.

FROM .. WORKDIR ... EXPOSE 80

Также была проблема с DNS в Windows Containers 1709. Можете ли вы попробовать использовать более новый базовый слой и попробовать еще раз?

Кроме того, ICMP заблокирован внутри Azure. Вы можете использовать PSPing для проверки возможности подключения.

Больше информации здесь.

Поскольку протокол ICMP не разрешен через балансировщик нагрузки Azure, вы заметите, что не можете пропинговать виртуальную машину Azure из Интернета, а из виртуальной машины Azure вы не можете пропинговать местоположения в Интернете.