Windows容器中的代理无法工作

67次阅读
没有评论

问题描述

在使用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_addressyour_proxy_port替换为你的代理地址和端口。
这样,你就不需要在curl命令中指定代理地址了。
请注意,这些解决方案可能需要根据你的具体环境进行调整。如果问题仍然存在,请确保代理服务器可用,并检查代理地址和端口是否正确。

正文完