【docker】登陸私有CA/自簽名證書鏡像庫,客戶端docker配置

私有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 服務。

以下是詳細解釋和操作建議:


關鍵說明:

  1. 動態(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 會立即識別新證書,無需重啟服務。

  1. 證書文件名要求
    確保證書文件名符合 Docker 要求:
  • 必須命名為 ca.crt(其他名稱無效)。
    正確操作:
# 復制并重命名為 ca.crt
cp harbor-ca.crt /etc/docker/certs.d/harbor.example.com/ca.crt

如果使用其他名稱(如 harbor-ca.crt),Docker 將忽略該證書。

  1. 直接登錄測試
    完成證書配置后,直接執(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 密碼

注意事項:

  1. 證書有效性
    確保 harbor-ca.crt 是鏡像倉庫的根 CA 證書(不是服務器證書),且與倉庫的域名匹配。

  2. 目錄權限
    證書目錄需允許 Docker 讀取:

sudo chmod 644 /etc/docker/certs.d/harbor.example.com/ca.crt
  1. 域名解析
    確保 harbor.example.com 能正確解析到倉庫 IP。

  2. 端口問題
    如果倉庫使用非標準端口(如 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ī)則:

  1. 證書格式:文件必須是PEM格式(通常以.crt、.pem.cert為擴展名)。
  2. 文件名要求:Docker會自動加載該目錄下所有符合 *.crt、*.cert*.pem 的文件作為可信CA證書。
  3. 目錄結構:目錄名稱必須與鏡像庫域名完全一致(如 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

常見錯誤排查:

  1. 證書未生效:確保證書是PEM格式(文本格式,以 -----BEGIN CERTIFICATE----- 開頭)。
  2. 目錄名不匹配:檢查/etc/docker/certs.d/下的目錄名是否與鏡像庫域名完全一致(包括端口號,如使用非443端口需包含端口:harbor.example.com:5000)。
  3. 權限問題:確保證書文件可讀:
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

關鍵說明:

  1. 路徑正確性
  • /etc/pki/ca-trust/source/anchors/ 是 Red Hat 系系統(tǒng)專門用于存放自定義 CA 證書的目錄
  • 這是比直接放在 /etc/pki/ca-trust/extracted/ 更規(guī)范的作法
  1. 必須重啟 Docker
sudo systemctl restart docker

因為 Docker 在啟動時會加載系統(tǒng)證書庫,只有重啟后才會識別新添加的證書

  1. 驗證證書是否被信任
# 列出所有被信任的證書
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 密碼

常見問題排查:

如果仍然遇到證書錯誤:

  1. 確保證書是 PEM 格式(文本格式,以 -----BEGIN CERTIFICATE----- 開頭)
  2. 檢查證書是否包含完整證書鏈
  3. 驗證域名是否匹配:
openssl x509 -in harbor-ca.crt -text -noout | grep "Subject: CN ="
  1. 檢查系統(tǒng)時間是否正確(證書有效期驗證)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容