运行 ASP.NET 在 Docker 桌面中使用 Windows 容器时传出 HTTP 请求超时

Outgoing HTTP requests time out when running ASP.NET in Docker Desktop using Windows Container

我是第一次在 Docker 桌面上 运行 安装 ASP.NET 网络应用程序。我在 Visual Studio 2019 中使用标准模板创建了一个 ASP.NET 应用程序(针对 .NET Framework),并提供 Docker 支持。

Docker文件:

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-1803
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .

Docker-compose.yml:

version: '3.4'

services:
  mydockerizedwebapp:
    image: ${DOCKER_REGISTRY-}mydockerizedwebapp
    container_name: mydockerizedwebapp
    build:
      context: .\MyDockerizedWebApp
      dockerfile: Dockerfile

Docker-compose.override.yml:

version: '3.4'

services:
  mydockerizedwebapp:
    ports:
      - "80"
networks:
  default:
    external:
      name: nat

我已经在我的 Win 10 计算机上安装了 Docker Desktop(运行ning Windows 容器)。

问题是我无法从 Docker.

内的 Web 服务器发出传出 http 请求

我收到以下错误消息:

'A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond'

运行 IIS Express 中的网络服务器工作正常。

我已经使用 Powershell 连接到托管图像的容器。 运行 "Test-NetConnection" returns 输出如下:

PS C:\inetpub\wwwroot> Test-NetConnection


ComputerName           : internetbeacon.msedge.net
RemoteAddress          : 13.107.4.52
InterfaceAlias         : Ethernet
SourceAddress          : 172.24.21.136
PingSucceeded          : True
PingReplyDetails (RTT) : 14 ms

Test-NetConnection -port 80 一段时间后失败,输出如下:

PS C:\inetpub\wwwroot> Test-NetConnection -port 80
WARNING: TCP connect to (13.107.4.52 : 80) failed


ComputerName           : internetbeacon.msedge.net
RemoteAddress          : 13.107.4.52
RemotePort             : 80
InterfaceAlias         : Ethernet
SourceAddress          : 172.24.21.136
PingSucceeded          : True
PingReplyDetails (RTT) : 15 ms
TcpTestSucceeded       : False

如果我在同一个容器中打开不同的 powershell window 并 运行 "netstat -an" 查看活动连接,TCP 请求是可见的:

Active Connections

  Proto  Local Address          Foreign Address        State
[...]
  TCP    172.24.21.136:49169    13.107.4.52:80         SYN_SENT

在整个连接测试期间,状态为 "SYN_SENT"。

我已经尝试按照 中的建议设置 MTU,但它对我不起作用。

值得一提的是,我在远程工作,所以我有一个VPN连接(软件),但即使我断开VPN也不起作用。

我错过了什么吗? 我已经尝试使用 nanoserver 图像创建一个 ASP.NET 核心网络应用程序,但我的问题仍然存在。所以我认为问题一定出在我的 Docker/network 配置中?

更新:

我在另一台既没有 VPN 连接也没有安装相同 AV 的计算机上测试了 运行ning 相同的图像。 "Test-NetConnection -port 80" 立即生效。

这是在不同计算机上成功测试的 Wireshark 捕获:

这是我计算机上失败测试的 Wireshark 捕获:

我看到发生故障的计算机正在使用相同的 DNS 服务器来查找 "internetbeacon.msedge.net" 的 IP,但是在 IP 13.107.4.52 的响应之后,没有从容器记录 TCP 请求。在工作机器上,这个请求在 DNS 响应后立即被捕获。

检查主机 firewall/AV,因为它很可能是这里的 curlpit