2016-01-05 82 views
0

我們目前有一個docker註冊表設置,它具有安全性。通常,爲了訪問它,從開發人員的角度來看,我必須對docker login --username=someuser --password=somepassword --email [email protected] https://docker-registry.domain.com做很長時間。在Centos 7上爲Docker註冊表訪問安裝證書

但是,由於我目前正在嘗試在雲中執行Docker容器的自動化部署,因此其中一項操作(docker pull命令)失敗,因爲登錄未執行(它在我添加登錄在模板中,但這很糟糕)。

我被建議使用證書來允許完成拉(.crt文件)。我嘗試使用這裏解釋的步驟安裝證書:https://www.linode.com/docs/security/ssl/ssl-apache2-centos

但它似乎沒有工作,我仍然必須執行手動登錄,以便能夠從註冊表中執行我的docker pull

有沒有辦法通過使用證書來替換登錄命令?

回答

1

正如我所看到的,docker服務器和私人註冊服務器之間的SSL認證的URL是錯誤的。

您可以按照:

運行域名註冊

在本地主機上運行時,有它的用途,大多數人都希望自己的註冊表,以得到更廣泛的使用。爲此,Docker引擎要求您使用TLS進行保護,這在概念上與使用SSL配置Web服務器非常相似。

獲得證書

假設您擁有該域myregistrydomain.com,並且它的DNS記錄指向的主機,你正在運行你的註冊表,首先需要從CA獲取證書

創建證書目錄:

mkdir -p certs 

然後移動和/或您的CRT文件重命名爲:證書/ domain.crt和密鑰文件:證書/ domain.key。

確保您在前面的步驟停止您的註冊表,然後用TLS重新啓動您的註冊表中啓用:

docker run -d -p 5000:5000 --restart=always --name registry \ 
    -v `pwd`/certs:/certs \ 
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ 
    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ 
    registry:2 

您現在應該能夠從另一個泊塢窗主機訪問您的註冊表:

docker pull ubuntu 
docker tag ubuntu myregistrydomain.com:5000/ubuntu 
docker push myregistrydomain.com:5000/ubuntu 
docker pull myregistrydomain.com:5000/ubuntu 

竅門

證書頒發者可能會爲您提供中間證書。在這種情況下,您必須將您的證書與中間人結合起來形成一個證書包。你可以用cat命令來做到這一點:

cat domain.crt intermediate-certificates.pem > certs/domain.crt 
+0

是的,我沒有朝着正確的方向前進。我沒有Docker註冊表本身的管理員權限,所以我不知道它是否以這種方式啓動,但我猜是這樣,因爲我被要求使用.crt文件。但是,除非我不明白您所說的內容,否則您在啓動註冊表時使用了證書。在執行「docker pull」時,如何指定使用證書來訪問註冊表?除非我在啓動docker守護進程(在另一個主機上)之前必須指定它,然後再執行pull ... – Amaranth

+0

您必須指定要拖動或推動的圖像。例如:一旦你完成了構建圖像「abc」,那麼你想把它推入註冊表服務器。您使用:「docker標記abc yourdomainregistryserver.com:5000/abc」,「docker push yourdomainregistryserver.com:5000/abc」之後,您想要將圖像「abc」下載到docker服務器中,您可以使用:「docker pull yourdomainregistryserver。 com:5000/abc「 –

+0

有關將中間證書與站點證書相結合的出色警告。爲我節省了很多時間。 – user837048