Windows 容器无法访问互联网
Windows Container unable to access internet
基于 运行 Windows 的容器 我无法从内部访问互联网。示例:
我可以从我的主机运行执行以下命令:
PS C:\Developer> nslookup aka.ms
Server: cache100.ns.tdc.net
Address: 193.162.153.164
Non-authoritative answer:
Name: aka.ms
Address: 88.221.62.148
当我尝试从容器内部执行此操作时:
PS C:\Developer> docker run mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 powershell nslookup aka.ms
*** UnKnown can't find aka.ms: Server failed
Server: UnKnown
Address: 172.28.112.1
虽然我对 aka.ms 并不特别感兴趣,但我尝试连接的所有服务都会出现此错误,因此我无法安装外部库等
我是 运行ning Docker Desktop v19.03.12。无论我是否启用了 WSL 2,该行为都会发生,并且我的 Docker 设置全部为默认设置。
注意:我前段时间遇到过这种行为。那时我将以下代码片段添加到我的 Docker 文件中:
RUN powershell -command certutil -generateSSTFromWU roots.sst && certutil -addstore -f root roots.sst && del roots.sst
据我了解,这将安装 SSH 证书,从而解决了问题。但是,此命令现在失败了:
PS C:\> certutil -generateSSTFromWU roots.sst
The server name or address could not be resolved 0x80072ee7 (WinHttp: 12007 ERROR_WINHTTP_NAME_NOT_RESOLVED) -- http://ctldl.windowsupdate.com/msdownload/update/v3/static/truste
dr/en/authrootstl.cab
CertUtil: -generateSSTFromWU command FAILED: 0x80072ee7 (WinHttp: 12007 ERROR_WINHTTP_NAME_NOT_RESOLVED)
CertUtil: The server name or address could not be resolved
我在基本服务器核心映像上对此进行了测试,并通过添加 DNS 设置使其正常工作。
我以交互方式连接到容器以对此进行测试,但您也可以将命令添加到 DockerFile。
docker run -it container powershell
键入 netsh 开始网络配置
首先我们查找要更改的网络
(在我的例子中是“以太网 2”)
然后我们在这个接口上添加一个静态DNS服务器
interface ip show config
interface ipv4 set dns name="Ehternet 2" static 8.8.8.8
exit
nslookup aka.ms
S C:\> nslookup aka.ms
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: aka.ms
Address: 23.38.17.26
运行 Windows 的容器 我无法从内部访问互联网。示例:
我可以从我的主机运行执行以下命令:
PS C:\Developer> nslookup aka.ms
Server: cache100.ns.tdc.net
Address: 193.162.153.164
Non-authoritative answer:
Name: aka.ms
Address: 88.221.62.148
当我尝试从容器内部执行此操作时:
PS C:\Developer> docker run mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 powershell nslookup aka.ms
*** UnKnown can't find aka.ms: Server failed
Server: UnKnown
Address: 172.28.112.1
虽然我对 aka.ms 并不特别感兴趣,但我尝试连接的所有服务都会出现此错误,因此我无法安装外部库等
我是 运行ning Docker Desktop v19.03.12。无论我是否启用了 WSL 2,该行为都会发生,并且我的 Docker 设置全部为默认设置。
注意:我前段时间遇到过这种行为。那时我将以下代码片段添加到我的 Docker 文件中:
RUN powershell -command certutil -generateSSTFromWU roots.sst && certutil -addstore -f root roots.sst && del roots.sst
据我了解,这将安装 SSH 证书,从而解决了问题。但是,此命令现在失败了:
PS C:\> certutil -generateSSTFromWU roots.sst
The server name or address could not be resolved 0x80072ee7 (WinHttp: 12007 ERROR_WINHTTP_NAME_NOT_RESOLVED) -- http://ctldl.windowsupdate.com/msdownload/update/v3/static/truste
dr/en/authrootstl.cab
CertUtil: -generateSSTFromWU command FAILED: 0x80072ee7 (WinHttp: 12007 ERROR_WINHTTP_NAME_NOT_RESOLVED)
CertUtil: The server name or address could not be resolved
我在基本服务器核心映像上对此进行了测试,并通过添加 DNS 设置使其正常工作。
我以交互方式连接到容器以对此进行测试,但您也可以将命令添加到 DockerFile。
docker run -it container powershell
键入 netsh 开始网络配置
首先我们查找要更改的网络
(在我的例子中是“以太网 2”)
然后我们在这个接口上添加一个静态DNS服务器
interface ip show config
interface ipv4 set dns name="Ehternet 2" static 8.8.8.8
exit
nslookup aka.ms
S C:\> nslookup aka.ms
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: aka.ms
Address: 23.38.17.26