2016-07-26 88 views
0

我試圖運行在內部使用泊塢註冊表,在CentOS 7多克爾註冊表--insecure的註冊表不工作

我從/usr/lib/systemd/system/docker.service設置泊塢窗的配置如下:

[Service] 
.... 
ExecStart= 
ExecStart=/usr/bin/docker daemon -H fd:// --insecure-registry 127.0.0.1:5000 
.... 

然後開始了碼頭工人守護進程systemctl daemon-reloadsudo service docker start,並證實泊塢窗是用選項運行與ps -ef | grep docker

root  116221  1 0 13:21 ?  00:00:00 /usr/bin/docker daemon -H fd:// --insecure-registry 127.0.0.1:5000 

但是當我試圖連接到註冊表https,它失敗了。

# Try from the server which the registry is running 

curl -X GET https://127.0.0.1:5000/v1/_ping 
=> curl: (35) Encountered end of file 


# Try from the remote client 

curl -X GET https://{registry-server-ip}:5000/v1/_ping 
=> curl: (35) Server aborted the SSL handshake 

當然,我已經成功與http訪問註冊表:

curl -X GET http://127.0.0.1:5000/v1/_ping 
=> {"host": ["Linux", ...} 

僅供參考,

# docker version 
Client: 
Version:  1.11.2 
API version: 1.23 
Go version: go1.5.4 
Git commit: b9f10c9 
Built:  Wed Jun 1 21:23:11 2016 
OS/Arch:  linux/amd64 

Server: 
Version:  1.11.2 
API version: 1.23 
Go version: go1.5.4 
Git commit: b9f10c9 
Built:  Wed Jun 1 21:23:11 2016 
OS/Arch:  linux/amd64 

我應該有更多的檢查?

回答

0

您可以在http中訪問但不在https中的原因很簡單,因爲您將註冊表配置爲不安全註冊表。這意味着,不啓用TLS。您可以在herehere找到有關安全註冊表的更多信息。

如果你想使https也可以工作,你需要準備一個CA,並配置你的註冊表。請確保您的CA已正確配置。

編輯: 我想你可能會誤解「不安全註冊表」是什麼。此功能不支持真正的TLS支持,它允許您創建一個私有註冊表,僅支持具有未知CA證書的HTTP或HTTPS。如果您需要HTTPS工作,您有兩種選擇:使用自簽名CA或購買CA. troubleshoot part here可能會幫助你。

EDIT2:爲了讓HTTP訪問一試,我運行一個簡單的測試註冊的官方圖片頁面上的導向下:Run the registry docker container: Quick version

下面是步驟:

  1. 添加不安全的選項DOCKER_OPTS="--insecure-registry=127.0.0.1:5000", 然後重新啓動docker服務。

  2. $ docker run -p 5000:5000 -v /home/mypc/data:/tmp/registry-dev registry

  3. $ docker tag hello-world 127.0.0.1:5000/hello

  4. $ docker push 127.0.0.1:5000/hello

的輸出是:

The push refers to a repository [127.0.0.1:5000/hello] 

a02596fdd012: Image successfully pushed 

Pushing tag for rev [c54a2cc56cbb] on {http://127.0.0.1:5000/v1/repositories/hello/tags/latest} 

碼頭推動工作。

+0

謝謝你的回覆!我以爲'--insecure-registry'選項允許遠程訪問,比如沒有CA的'docker pull'或'docker push'。 但是我的理解是你的評論是我需要配置CA而不用'--insecure-registry'來允許'docker pull'或'docker push'作爲命令使用'https',對嗎? – Seonho

+0

@Seonho嗨,是的,--insecure-registry允許你在沒有CA的情況下進行遠程訪問,但是在這種情況下,遠程訪問只有HTTP。只要你有一個CA,你就可以做HTTPS。但是,兩種情況取決於您擁有哪種類型的CA:1.如果您的CA是自簽名的(意味着它不是由可信簽名人發佈),那麼您必須添加--insecure-registry選項。 2.如果你的CA是可信的(例如你買了一個),那麼你就不需要這個--insecure-registry選項。希望這有幫助。 –

+0

@Seonho我必須提到的最後一件事是您可以使用自簽名CA,並且不使用--insecure-registry選項。檢查這裏的步驟:https://docs.docker.com/registry/insecure/#/using-self-signed-certificates在步驟4中,「指示每個docker守護程序信任您的自簽名證書」。 –

0

您可以在此鏈接一看還有:

https://docs.docker.com/engine/security/certificates/

它說明你在哪裏存儲在泊塢窗客戶機證書註冊表不再被視爲不安全的。

+0

謝謝,Jonathan,我已經檢查過這個文檔:) – Seonho

+0

然後你必須爲你的私人註冊表創建證書。然後,您必須手動將ca複製到每個想要在/etc/docker/certs.d/hostname:port下訪問的docker客戶端實例,然後才能推送您的圖像。 –