【问题标题】:Docker not able to pull images behind proxy TLS handshake timeoutDocker 无法在代理 TLS 握手超时后提取图像
【发布时间】:2019-01-24 04:49:57
【问题描述】:

我在 CentOS 7 上安装了最新的 Docker 版本 18.06.0。 我的服务器位于公司网络中,因此使用代理服务器访问注册表。 我根据 docker 文档添加了代理设置。 但最后添加代理设置部分工作。即现在 docker 正在使用代理在运行之前拉取图像。

但现在它无法给出以下错误:

$ sudo docker run hello-world
Unable to find image ‘hello-world:latest’ locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: net/http: TLS handshake timeout.

另外,登录失败:

$ sudo docker login --username=XXXX
Password:
Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: EOF

我的代理非常快。当我使用它使用 wget 或 curl 从 Internet 下载任何内容时,我看到 90 到 100Mbps 的速度。 我机器上的其他应用程序实用程序(例如 yum)正在完美地使用此代理,并且运行良好。 现在不知道为什么只有 Docker 下载镜像有问题。

安装配置详情如下:

版本:

$ sudo docker version
Client:
Version: 18.06.0-ce
API version: 1.38
Go version: go1.10.3
Git commit: 0ffa825
Built: Wed Jul 18 19:08:18 2018
OS/Arch: linux/amd64
Experimental: false

服务器:

Engine:
Version: 18.06.0-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: 0ffa825
Built: Wed Jul 18 19:10:42 2018
OS/Arch: linux/amd64
Experimental: false

操作系统版本:

Description: CentOS Linux release 7.2.1511 (Core)
Release: 7.2.1511

Docker 代理配置:

$ cat /etc/systemd/system/docker.service.d/https-proxy.conf
[Service]
Environment=“HTTP_PROXY=http://pqr.corp.xxx.com:8080”
Environment=“HTTPS_PROXY=https://pqr.corp.xxx.com:8080”
Environment=“NO_PROXY=localhost,127.0.0.1”

添加此配置后我已经完成了

sudo systemctl daemon-reload
sudo systemctl restart docker

寻求具体帮助。

我浏览了大部分关于 TLS 握手超时问题的帖子,但没有得到任何适合我的答案或建议。 我的代理很好,docker 正在使用它。我不明白为什么会出现这种讨厌的超时。

【问题讨论】:

  • 当我将 docker 从 Docker 版本 17.12.1-ce、构建 7390fc6 升级到 Docker 版本 18.06.1-ce、构建 e68fc7a 时,我遇到了同样的问题。降级docker解决了我的问题。我知道这不是一个解决方案,但希望这会有所帮助
  • 我尝试了 Brown 的建议并将我的降级到 17.12.0-ce,现在它工作正常,甚至无需配置代理设置。我猜它选择默认系统代理设置。
  • @rebulation 这个问题是关于私有存储库的登录问题。这与我的 docker 的公共 repo 登录失败不同。我已经尝试过那里建议的选项。这些都不起作用。
  • @Brownnightingale 我同意。它适用于较低版本,但不适用于最新版本。我想用这个版本。

标签: docker ssl proxy docker-registry docker-pull


【解决方案1】:

原因通常与您的网络设置有关。特别是,如果您的 Docker 设置了代理,请使用“无代理”选项将其临时设置,它应该可以工作。

干杯

【讨论】:

【解决方案2】:

我在防火墙后面也面临同样的问题。请按照以下步骤操作:

$ sudo vim /etc/systemd/system/docker.service.d/http_proxy.conf
[Service]
Environment=“HTTP_PROXY=http://username:password@IP:port/”

不要使用或删除 https_prxoy.conf 文件。

重新加载并重新启动您的 docker

    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker
    $ docker pull hello-world
    Using default tag: latest
    latest: Pulling from library/hello-world
    1b930d010525: Pull complete
    Digest: sha256:2557*********************************8
Status: Downloaded newer image for hello-world:latest

【讨论】:

    【解决方案3】:

    配置文件是:

    [Service]
    Environment=“HTTP_PROXY=http://pqr.corp.xxx.com:8080”
    Environment=“HTTPS_PROXY=https://pqr.corp.xxx.com:8080”
    Environment=“NO_PROXY=localhost,127.0.0.1”
    

    注意第 3 行:HTTPS_PROXY=https

    代理服务器是否支持 HTTPS?或者应该有错误。

    也许HTTPS_PROXY=http 是正确的。

    顺便说一句,类似的错误是Get https://registry-1.docker.io/v2/: proxyconnect tcp: EOF

    【讨论】:

    • 这确实有效。我的 HTTPS_PROXY 代理 url 是 http://:
    • 它对我有用,我的问题是我使用的是 HTTPS_PROXY=https,而我的代理不支持 https,所以我改为 HTTPS_PROXY=http,它就像一个魅力
    【解决方案4】:

    我之前的答案指向这个方向,但都没有明确说明:删除所有 https 代理设置可以解决这个问题。我有一个 https-proxy.conf 文件,就像 OP 和 docker pull 一样开始在我删除HTTPS_PROXY 行后工作。我知道我使用的 https 代理可以正常工作,所以它一定是 Docker 方面的问题。

    我找到了这个解决方案on serverfault

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多