私有CA/自簽名證書鏡像庫地址:https://harbor.example.com
docker 登陸自簽名證書的docker鏡像庫:
mkdir -p /etc/docker/certs.d/harbor.example.com/
cp harbor-ca.crt /etc/docker/certs.d/harbor.example.com/
docker login -u 賬號 -p 密碼 harbor.example.com
docker login harbor.example.com 之前是否需要 restart 本地docker ?
根據(jù) Docker 的官方文檔和常見實踐,配置自簽名證書后通常不需要重啟 Docker 服務。
以下是詳細解釋和操作建議:
關鍵說明:
-
動態(tài)加載證書
Docker 客戶端在運行時會自動檢測/etc/docker/certs.d/目錄下的證書變更。當你將 CA 證書復制到對應目錄后:
mkdir -p /etc/docker/certs.d/harbor.example.com/
cp harbor-ca.crt /etc/docker/certs.d/harbor.example.com/
Docker 會立即識別新證書,無需重啟服務。
-
證書文件名要求
確保證書文件名符合 Docker 要求:
-
必須命名為
ca.crt(其他名稱無效)。
正確操作:
# 復制并重命名為 ca.crt
cp harbor-ca.crt /etc/docker/certs.d/harbor.example.com/ca.crt
如果使用其他名稱(如 harbor-ca.crt),Docker 將忽略該證書。
-
直接登錄測試
完成證書配置后,直接執(zhí)行登錄命令:
docker login -u 賬號 -p 密碼 harbor.example.com
特殊情況處理(需重啟 Docker):
如果遇到以下錯誤,才需要重啟 Docker 服務:
x509: certificate signed by unknown authority
重啟 Docker 命令:
# Systemd 系統(tǒng)
sudo systemctl restart docker
# SysVinit 系統(tǒng) (舊版 Linux)
sudo service docker restart
完整操作流程:
# 1. 創(chuàng)建證書目錄
sudo mkdir -p /etc/docker/certs.d/harbor.example.com/
# 2. 復制證書并重命名為 ca.crt
sudo cp harbor-ca.crt /etc/docker/certs.d/harbor.example.com/ca.crt
# 3. 直接登錄(無需重啟 Docker)
docker login harbor.example.com -u 賬號 -p 密碼
# 4. 若登錄報錯 "x509: unknown authority",則重啟 Docker 后再試
sudo systemctl restart docker# 或 sudo service docker restart
docker login harbor.example.com -u 賬號 -p 密碼
注意事項:
證書有效性
確保harbor-ca.crt是鏡像倉庫的根 CA 證書(不是服務器證書),且與倉庫的域名匹配。目錄權限
證書目錄需允許 Docker 讀取:
sudo chmod 644 /etc/docker/certs.d/harbor.example.com/ca.crt
域名解析
確保harbor.example.com能正確解析到倉庫 IP。端口問題
如果倉庫使用非標準端口(如5000),目錄名需包含端口:
/etc/docker/certs.d/harbor.example.com:5000/ca.crt
總結:
- 99% 的情況無需重啟 Docker,動態(tài)加載證書是 Docker 的默認行為。
- 優(yōu)先檢查證書文件名是否為
ca.crt和路徑是否正確。 - 僅在登錄報證書錯誤時重啟 Docker 服務。
是否一定需要復制證書harbor-ca.crt并重命名為 ca.crt ?
對于私有CA或自簽名證書的Docker鏡像庫(如https://harbor.example.com),當您將證書文件(如harbor-ca.crt)復制到/etc/docker/certs.d/harbor.example.com/目錄時,不需要重命名文件,但必須確保文件滿足以下條件:
關鍵規(guī)則:
-
證書格式:文件必須是PEM格式(通常以
.crt、.pem或.cert為擴展名)。 -
文件名要求:Docker會自動加載該目錄下所有符合
*.crt、*.cert或*.pem的文件作為可信CA證書。 -
目錄結構:目錄名稱必須與鏡像庫域名完全一致(如
harbor.example.com)。
您的操作:
mkdir -p /etc/docker/certs.d/harbor.example.com/
cp harbor-ca.crt /etc/docker/certs.d/harbor.example.com/# 直接復制,無需改名
- ? 正確:因為
harbor-ca.crt是.crt后綴,Docker會自動識別。
補充說明:
-
多證書支持:如果目錄中有多個證書文件(如
ca1.crt、ca2.pem),Docker會加載所有證書。 - 重啟Docker?:通常無需重啟Docker服務,但若遇到問題可嘗試重啟:
sudo systemctl restart docker
- 測試連接:
docker login -u 賬號 -p 密碼 harbor.example.com
常見錯誤排查:
-
證書未生效:確保證書是PEM格式(文本格式,以
-----BEGIN CERTIFICATE-----開頭)。 -
目錄名不匹配:檢查
/etc/docker/certs.d/下的目錄名是否與鏡像庫域名完全一致(包括端口號,如使用非443端口需包含端口:harbor.example.com:5000)。 - 權限問題:確保證書文件可讀:
chmod 644 /etc/docker/certs.d/harbor.example.com/harbor-ca.crt
結論:無需重命名,保留原文件名 harbor-ca.crt 即可生效。
Linux系統(tǒng)級信任自簽名證書的相關路徑和操作
在 RHEL/CentOS/Fedora 系統(tǒng)上信任自簽名證書的正確步驟:
# 1. 復制證書到信任錨點目錄
sudo cp harbor-ca.crt /etc/pki/ca-trust/source/anchors/
# 2. 更新系統(tǒng)證書信任庫
sudo update-ca-trust
# 3. 重啟 Docker 服務(必須步驟)
sudo systemctl restart docker
關鍵說明:
- 路徑正確性:
-
/etc/pki/ca-trust/source/anchors/是 Red Hat 系系統(tǒng)專門用于存放自定義 CA 證書的目錄 - 這是比直接放在
/etc/pki/ca-trust/extracted/更規(guī)范的作法
- 必須重啟 Docker:
sudo systemctl restart docker
因為 Docker 在啟動時會加載系統(tǒng)證書庫,只有重啟后才會識別新添加的證書
- 驗證證書是否被信任:
# 列出所有被信任的證書
awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/pki/tls/certs/ca-bundle.crt | grep "Your Certificate Subject"
# 或者檢查特定證書
openssl verify -CAfile /etc/pki/tls/certs/ca-bundle.crt harbor-ca.crt
對于其他 Linux 發(fā)行版:
- Debian/Ubuntu:
sudo cp harbor-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
sudo systemctl restart docker
- openSUSE:
sudo cp harbor-ca.crt /etc/pki/trust/anchors/
sudo update-ca-certificates
sudo systemctl restart docker
完成后的登錄操作:
docker login harbor.example.com -u 賬號 -p 密碼
常見問題排查:
如果仍然遇到證書錯誤:
- 確保證書是 PEM 格式(文本格式,以
-----BEGIN CERTIFICATE-----開頭) - 檢查證書是否包含完整證書鏈
- 驗證域名是否匹配:
openssl x509 -in harbor-ca.crt -text -noout | grep "Subject: CN ="
- 檢查系統(tǒng)時間是否正確(證書有效期驗證)