使用代理的 docker pull 给出“第一条记录看起来不像是 TLS 握手”

使用代理的 docker pull 给出“第一条记录看起来不像是 TLS 握手”

我有一家公司服务器,必须使用代理来处理出站流量。按照微软的docker文档,我运行了Powershell命令:

[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://my.secret.proxy.net:8888", [EnvironmentVariableTarget]::Machine)
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "https://my.secret.proxy.net:8888", [EnvironmentVariableTarget]::Machine)
Restart-Service docker

docker build之后运行会给我:

Get https://registry-1.docker.io/v2/: proxyconnect tcp: tls: first record does not look like a TLS handshake

我尝试过使用代理地址httphttps。结果相同。该代理是透明代理,并不“智能”。

运行pip install flake8 --proxy=https://my.secret.proxy.net:8888有效,所以我知道代理有效。

有什么想法吗?还有什么进一步调试的技巧吗?谢谢!

答案1

在你"HTTPS_PROXY", "https://my.secret.proxy.net:8888"改变https://http://

答案2

当前版本的 Windows 版 Docker 有一个资源 -> 代理您可以在 UI 部分中配置用于拉取图像的代理。

参考:https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

您仍需要在正在运行的容器中配置代理变量。为此,您可以使用~/.docker/config.json以下命令更新:

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://192.168.1.12:3128",
     "httpsProxy": "http://192.168.1.12:3128",
     "noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
   }
 }
}

我不确定它在 Windows 上位于何处,特别是如果你没有使用 WSL2,但如果你已经docker login登录到注册表,该文件应该已经存在。

参考:https://docs.docker.com/network/proxy/

相关内容