我的 Windows docker 容器无法解析 host.docker.internal,但它可以与 Linux 容器一起使用。我更愿意继续使用 Linux 容器,但我在使用旧的 .Net Framework 4.7.2 应用程序时遇到了问题。
我的应用程序连接到本地计算机上的 RabbitMQ。这在 Linux 容器中按预期工作,但在 Windows 容器中它会抛出此错误:
System.Net.Sockets.SocketException:没有已知的主机
我尝试过 ping host.docker.internal。
C: pp>ping host.docker.internal Ping 请求找不到主机 主机.docker.内部。请检查名称并重试。
这是我的 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"]
我使用的是 docker 版本 20.10.2,以及 docker 桌面版 3.1.0。
我在 Windows 10 版本 10.0.18363 上运行。
我以迂回的方式解决了这个问题。在我的 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
此后,在我的 docker 文件中,我添加了以下命令
RUN $file = $Env:windir+'\System32\drivers\etc\hosts'; '172.18.0.1 host.docker.internal' | Add-Content -PassThru $file;
现在它对我来说就像一种魅力。