繁体   English   中英

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

[英]docker login behind proxy on private registry gives TLS handshake timeout

我们有一个私有的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

实际上,我发现如果我注释掉完整的环境线,它适用于私有注册表,但不适用于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环境变量...但不,它不应该。

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

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

registryname将相应更改

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

ip link set dev eth0 mtu 1300

MTU大小非常重要

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

如果未正确配置docker守护程序代理,则可以获取TLS handshake timeout错误。

# verify docker daemon proxy configuration
/etc/systemd/system/docker.service.d/proxy.conf

# flush changes
sudo systemctl daemon-reload

# restart docker service
sudo systemctl restart docker 

有关更多详细信息,请参阅https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM