Docker Windows 容器无法解析 host.docker.internal

Don*_*ers 12 docker docker-container docker-for-windows windows-container docker-desktop

我的 Windows docker 容器无法解析host.docker.internal,但它可以与 Linux 容器一起使用。我更愿意继续使用 Linux 容器,但我在使用旧的 .Net Framework 4.7.2 应用程序时遇到了问题。

我的应用程序连接到本地计算机上的 RabbitMQ。这在 Linux 容器中按预期工作,但在 Windows 容器中它会抛出此错误:

System.Net.Sockets.SocketException:没有这样的主机已知

我尝试过 ping host.docker.internal。

C:\app>ping host.docker.internal Ping 请求找不到主机 host.docker.internal。请检查名称并重试。

这是我的 dockerFile:

FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019
ARG source
WORKDIR /app
COPY ${source:-SampleApp/obj/Docker/publish} .
ENTRYPOINT ["C:\\app\\SampleApp.exe"]
Run Code Online (Sandbox Code Playgroud)

我使用的是 docker 版本20.10.2和 docker 桌面版本3.1.0
我在 Windows 10 版本 10.0.18363 上运行。

Sum*_*h S 1

我以迂回的方式解决了这个问题。在我的 docker-compose.yml 文件中,我创建了一个网络并绑定了一个静态 IP 作为网关 ip,如下所示

version: '3.4'

services:
  service-name:
    networks:
        local_net:
            ipv4_address: 172.18.0.2
networks:
  local_net:
    ipam:
        config:
           -
            subnet: 172.18.0.0/25
            gateway: 172.18.0.1
Run Code Online (Sandbox Code Playgroud)

之后,在我的 docker 文件中,我添加了以下命令

RUN $file = $Env:windir+'\System32\drivers\etc\hosts'; '172.18.0.1 host.docker.internal' | Add-Content -PassThru $file;
Run Code Online (Sandbox Code Playgroud)

现在它对我来说就像一种魅力。