首页 文章

私有注册表上的代理登录后面的代理提供TLS握手超时

提问于
浏览
1

我们有一个私有的docker注册表在工作(基于portus,但无论如何),我尝试将图像推送到此注册表,但它不起作用 . 它失败并显示以下错误消息:

$ sudo docker login archive.docker-registry.mycompany.com
Username: mylogin
Password: 
Error response from daemon: Get https://archive.docker-registry.mycompany.com/v1/users/:
    net/http: TLS handshake timeout
$

我已经在/etc/systemd/system/docker.service.d/http-proxy.conf中配置了代理(我的docker在centos 7上):

[Service]
Environment="HTTP_PROXY=http://proxy.mycompany.com:8000/" "NO_PROXY=localhost,127.0.0.1,archive.docker-registry.mycompany.com"

但它仍然失败 .

我尝试在url中使用http或https来使用HTTPS_PROXY而不是HTTP_PROXY,我尝试手动下载证书并在系统中配置它们(update-ca-certs)但它仍然失败 .

当我以root身份更改此配置文件时,我执行了:

# systemctl daemon-reload
# systemctl restart docker

3 回答

  • 2

    实际上,我发现如果我注释掉完整的环境线,它适用于私有注册表,但不适用于docker hub(当然,不再需要代理) . 这是最终解决方案适用于私有注册表和docker hub公共注册表:

    在NO_PROXY环境变量中,只应使用域名,而不是FQDN(包括“archive . ”hostname prefix):

    这是我的配置文件:

    [Service]
    Environment="HTTP_PROXY=http://proxy.mycompany.com:8000/" "NO_PROXY=localhost,127.0.0.1,docker-registry.mycompany.com"
    

    请注意,不再有“存档” . 也不是“portus” . NO_PROXY中的前缀,只是从“docker-registry”开始的域名 .

    当我看到docker登录命令行包括“archive”时 . 前缀,这是误导,我认为它必须在NO_PROXY环境变量...但不,它不应该 .

    希望它可以帮助某人 . 我希望我之前在谷歌上找到答案,但我没有,所以我只是在这里发布,它可能对某人有所帮助 .

  • 0

    如果您使用的是私有注册表,则需要在/etc/docker/certs.d/下放置证书 - registryname /ca.crt

    registryname 将相应更改

    另外,请将您的 MTU 大小更改为1300,这也是我解决错误的一件事 . 注册表一,我相信你可能已经完成了 . MTU更改命令

    ip link set dev eth0 mtu 1300

    MTU大小非常重要

  • 0

    我安装的最新稳定版本(18.xx)有这个问题,在降级到17.12.0-ce后,它对我来说很好 .

相关问题