簡體   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