问题描述
在使用Windows 10中的Windows容器时遇到了问题。他在环境变量设置中设置了代理变量(HTTP_PROXY,HTTPS_PROXY),并且正在使用VPN。他还配置了资源->代理。
他尝试使用以下Dockerfile内容构建Docker镜像。
FROM mcr.microsoft.com/windows/servercore:ltsc2019
SHELL ["cmd", "/S", "/C"]
RUN mkdir c:\temp \ && curl -SL --output c:\temp\vs_buildtools.exe https://aka.ms/vs/16/release/vs_buildtools.exe
当执行此Docker镜像构建命令时,显示以下错误。
Step 5/5 : RUN mkdir c:\temp && curl -SL --output c:\temp\vs_buildtools.exe https://aka.ms/vs/16/release/vs_buildtools.exe ---> Running in 0c134b2d004a % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:00:12 --:--:-- 0curl: (6) Could not resolve host: aka.msThe command 'cmd /S /C mkdir c:\temp && curl -SL --output c:\temp\vs_buildtools.exe https://aka.ms/vs/16/release/vs_buildtools.exe' returned a non-zero code: 6
他尝试使用构建参数和在docker守护进程配置文件中添加dns: 8.8.8.8,但上述错误未解决。
当在Windows的CMD中执行相同的curl命令时,不会出现任何错误。
C:\Users\mshanm6x>curl -SL --output c:\temp\vs_buildtools.exe https://aka.ms/vs/16/release/vs_buildtools.exe % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0100 1432k 100 1432k 0 0 238k 0 0:00:06 0:00:06 --:--:-- 332k
而且,没有HTTP_PROXY,HTTPS_PROXY环境变量和VPN关闭时,相同的Dockerfile也能够构建成功。
真正的问题是什么?为什么在容器内部使用代理配置时无法工作?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
我遇到了相同的问题,并发现你还需要在curl命令中指定代理地址。
所以你的Dockerfile变成了这样:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
ENV HTTP_PROXY=$HTTP_PROXY
ENV HTTPS_PROXY=$HTTPS_PROXY
SHELL ["cmd", "/S", "/C"]
RUN mkdir c:\temp \ && curl -SL --output c:\temp\vs_buildtools.exe https://aka.ms/vs/16/release/vs_buildtools.exe --proxy %HTTP_PROXY%
你需要使用以下指令来调用构建命令:
docker build --build-arg HTTP_PROXY --build-arg HTTPS_PROXY --tag=tswin .
方案2
请注意以下操作注意版本差异及修改前做好备份。
另一种方法是在Dockerfile中直接设置代理环境变量。
FROM mcr.microsoft.com/windows/servercore:ltsc2019
ENV HTTP_PROXY=http://your_proxy_address:your_proxy_port
ENV HTTPS_PROXY=http://your_proxy_address:your_proxy_port
SHELL ["cmd", "/S", "/C"]
RUN mkdir c:\temp \ && curl -SL --output c:\temp\vs_buildtools.exe https://aka.ms/vs/16/release/vs_buildtools.exe
请将your_proxy_address
和your_proxy_port
替换为你的代理地址和端口。
这样,你就不需要在curl命令中指定代理地址了。
请注意,这些解决方案可能需要根据你的具体环境进行调整。如果问题仍然存在,请确保代理服务器可用,并检查代理地址和端口是否正确。
正文完