2017-05-17 22 views
0

當我做docker pull從使用/var/run/docker.sock運行泊塢窗(內碼頭工人碼頭工人)的容器裏面,我得到這個錯誤:docker.sock用於docker pull的哪個ca.crt?

FATA[0000] Error response from daemon: v1 ping attempt failed with error: Get https://registry.com:5000/v1/_ping: x509: certificate has expired or is not yet valid. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry registry.com:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/registry.com:5000/ca.crt

所以我也跟着指示,並補充說目錄內ca.crt,也將不安全選項添加到/etc/default/docker,但錯誤沒有消失。

我想知道當我從容器內拉出時,/var/run/docker.sock命令在哪裏查找證書。特別是當使用相同的配置(ca.crt在正確的文件夾中,並且不安全的選項也被添加)從外部(主機)拉出工作時。

+0

關閉我的頭頂,拉應該從主機上運行的dockerd守護進程運行,而不是從容器內的客戶端運行。 – BMitch

+0

@BMitch這樣它會從主機上查找cert文件夾(/etc/docker/certs.d/registry.com:5000/ca.crt)嗎? – Casper

+0

你使用舊的v1註冊表嗎? ca.crt必須包含整個鏈,從subCA到CA(如果是自簽名或未知的)。如果它是一個已知的CA(安裝了ca-certificates,對於基於Debian的發行版),您可以省略它,但它不會影響到那裏。 –

回答

0

/var/run/docker.sock不是正在尋找證書的東西。這只是您用來與dockerd進行通信的套接字。當你做一個拉,你要求碼頭守護進程去談論註冊表。

你從哪裏得到ca.crt文件?這真的是您的registry.com:5000服務器證書的簽名證書嗎?你把它放在dockerd運行的主機上的/et c/default/docker/registry.com:5000/ca.crt,還是放在容器裏?

ca.crt文件屬於守護程序正在運行的位置。仔細檢查您在主機上的正確位置是否有正確的文件,並且應該解決問題。

+0

就像我剛纔提到的,pull命令在主機級別工作,我把ca.crt(domain.crt)放在這裏'/etc/default/docker/registry.com:5000/ca.crt'。如果pull命令來自主機級別,那麼它如何在容器內部不起作用,但從外部起作用?這讓我感到困惑。 – Casper

+0

您是否正在與容器內的同一個docker守護進程對話?或者,你是否在運行類似於dind的東西? – programmerq

+0

相同的碼頭守護程序,也有一個碼頭安裝在容器內,但我沒有使用,碼頭。這裏使用的是襪子 – Casper

0

得到它現在的工作,解決方案是重新啓動容器內的docker守護進程。實際上,我之前嘗試過,但重啓後Docker服務不斷下降,這讓我認爲這是來自主機的docker服務。

我無法重新啓動docker服務的原因是/var/run/docker.pid存在,阻止docker重新啓動。所以我刪除了該pid和碼頭重新啓動成功。

相關問題