如何让Docker Desktop Windows解析主机名?
假设我的机器名为 workstation-mine.company.network,IP 为 10.11.12.13
我无法从任何 Docker、Edge 版本 2.0.3.0、容器(后台有 Kubernetes)解析它,例如:
docker run -it --rm busybox
ping workstation-mine.company.network
失败并显示“错误地址”消息,但
ping workstation-somebody-else.company.network
ping www.google.com
工作正常,IP 地址已解析。 我还可以 ping 我的 IP 10.11.12.13,尽管响应时间比 ping host.docker.internal 长得多。
使用 nslookup,我可以将公司网络中所有附近的工作站名称解析为 IP,除了我自己的:
nslookup workstation-mine.company.network
** server can't find workstation-mine.company.network: NXDOMAIN
nslookup 10.11.12.13
** server can't find 13.12.11.10.in-addr.arpa: NXDOMAIN
docker 安装是在一个相当大的脚本中完成的,我只是使用它,并且不希望使用“host.docker.internal”,因为访问的目的地也可能是另一台机器。
有一个解决方法,就是给我自己的机器一个自定义名称,比如“my-host”,然后将其编辑到 Windows\system32\drivers\etc\hosts 文件中。然后从容器中
ping my-host
就可以了。
顺便说一句,
我不知道这是否相关,但我在 ProgramData\DockerDesktop\Service.txt 日志中不断收到 DNS 错误:
[14:31:31.414][ApiProxy ][Info ] time="2019-03-26T14:31:31+01:00" msg="未知 DNS 查询类型 13" [14:31:31.414][ApiProxy ][Info ] time="2019-03-26T14:31:31+01:00" msg="DNS 失败:1160493135005290919.1659836570884043770.\tIN\t HINFO:未知查询类型”
和
[15:40:08.358][ApiProxy ][Info ] time="2019-03-26T15:40:08+01:00" msg="DNS 故障:docker-desktop.\tIN\t AAAA:errno 9002:DnsQuery:DNS 服务器故障。"
第一个 DNS 错误似乎与名称服务器中一些不寻常的、列为弃用的 HINFO 行类型有关,第二个错误与 IP v6(AAAA 表示 IP v6)有关。
我刚刚遇到了同样的问题。我可以通过以下方式 ping 8.8.8.8:
docker run mcr.microsoft.com/dotnet/core/sdk:3.0-nanoserver-1803 ping 8.8.8.8
但无法 ping
google.com
或任何域。
然后我尝试通过以下方式查找容器使用的虚拟网络:
docker run mcr.microsoft.com/dotnet/core/sdk:3.0-nanoserver-1803 ipconfig /all
然后我发现网络以某种方式使用了错误的接口,我当时没有连接,因为我公司的 VPN 设置了错误的 DNS。
最后,我在
注册表编辑器
中找到
DNS 后缀
,删除包含该名称的整个文件夹,然后重新启动整个 docker。 DNS 再次正常工作。
您可以在此处找到网络接口:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
遗憾的是,本地主机名解析似乎无法在最新的 Docker for Windows 版本(目前最高版本为 2.1.0.1)中工作
我发现的唯一可能的解决方案是降级到 Docker for Windows 2.0.0.3
注意 :您需要卸载当前安装才能安装版本 2.0.0.3。因此,您将丢失所有数据(容器、图像等)。
Github 上有一个相关问题,由 Stefan Großmann 创建: 无法解析 Docker Desktop Windows 中的主机名 #3810