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