无法从容器内部连接到chocolatey.org或任何其他互联网站

87次阅读
没有评论

问题描述

在使用Windows容器时遇到了一个问题,无法从容器内部连接到chocolatey.org或其他任何互联网站。用户正在运行Windows Server 2016 Datacenter 64位版本,并使用Docker For Windows运行Windows容器。用户尝试在容器内运行以下命令来安装chocolatey:

reboot my host machinedocker run -it microsoft/windowsservercorepowershelliex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));

用户期望这个命令能够在容器内安装chocolatey,但实际上却无法连接到chocolatey.org。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据最佳回答,问题似乎是由于Windows镜像将DNS配置为首先使用NAT接口的默认网关,然后使用主机机器的DNS导致的。解决此问题的方法是在CLI中添加--dns 8.8.8.8(或您的本地解析器)参数。
以下是解决方案的步骤:
1. 在运行Docker命令的命令行中添加--dns 8.8.8.8参数。
2. 运行命令以安装chocolatey。
以下是一个示例命令:

docker run -it --dns 8.8.8.8 microsoft/windowsservercorepowershell ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))

这样,容器内的DNS解析将使用指定的DNS服务器,从而解决无法连接到chocolatey.org的问题。

方案2

根据另一个回答,您可以编辑Docker Desktop的Daemon文件来解决此问题。在Docker App的设置中,找到Docker Engine并编辑Daemon文件,在文件的末尾添加以下内容:

"dns": ["192.10.0.2", "8.8.8.8"]

其中,192.10.0.2是您主机机器的DNS服务器地址,8.8.8.8是Google的DNS服务器地址作为备用。然后重新启动Docker Desktop,容器内的远程URL将能够解析。
请注意,这个解决方案是基于Windows主机的Docker Desktop,如果您的环境不同,请根据实际情况进行调整。

方案3

根据另一个回答,您可以尝试刷新Windows主机的DNS缓存来解决此问题。在Windows主机上打开命令提示符,运行以下命令:

ipconfig /flushdns

然后重新运行容器并尝试连接到chocolatey.org。
请注意,这个解决方案是基于Windows主机的操作,如果您的环境不同,请根据实际情况进行调整。

方案4

根据另一个回答,您可以尝试使用完全离线安装的方式来安装chocolatey。根据这个链接中的说明,运行以下命令:

@powershell -NoProfile -ExecutionPolicy Bypass -Command "[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

这将使用离线安装的方式安装chocolatey,无需连接到互联网。
请注意,这个解决方案是基于Windows主机的操作,如果您的环境不同,请根据实际情况进行调整。

方案5

如果以上解决方案都无法解决问题,您可以尝试在容器内部手动配置DNS服务器。在容器内部打开命令提示符,运行以下命令:

netsh interface ip set dns "以太网" static 8.8.8.8

其中,以太网是您容器内部的网络接口名称,8.8.8.8是您要配置的DNS服务器地址。然后重新运行容器并尝试连接到chocolatey.org。
请注意,这个解决方案是基于Windows容器的操作,如果您的环境不同,请根据实际情况进行调整。

正文完