[英]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.