问题描述
在使用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容器的操作,如果您的环境不同,请根据实际情况进行调整。