前言

有別於多數開發過程中使用的 Tool Chain,Image 管理與使用上有較為嚴格的限制,若沒有設定憑證,使用者必須透過更多設定才能順利下載 Image。舉個例子:開發者在 daemo.json 上加入 "insecure-registries" ,並透 systemctl daemon-reload 與 systemctl restart docker 指令才得以從沒有憑證的 Image Registry 拉取 Image。Harbor 也不例外,在成功與啟動 Harbor 後首要任務即是加入憑證。

本系列文章是透過 Azure VM (Ubuntu) 以 docker compose 方式安裝 Harbor,並透過Azure Public IP  為 Harbor 服務 DNS Prefix 產生憑證。您也可參考官網 Configure HTTPS Access to Harbor 文件產生自簽憑證。本篇文章僅說明如何為你的 Harbor 服務設定憑證。





憑證設定

憑證設定分成兩個部分,完成這兩個部份的設定使用者才能順利地對 Image 進行操作

1. Harbor 服務:在 harbor.yml 憑證

2. Docker 服務:在 etc/docker/certs.d/yourdomain.com/ 內提供憑證


步驟 1. 將你的憑證上傳伺服器

cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/


步驟 2. 於 Harbor 資料夾中編輯 harbor.yml,在 https 區塊設定 port、certificate 路徑與 private_key 路徑。 由於是透過 Nginx 啟動,須注意憑證格式為 rsa。




步驟 3. 將 cert, key 與 crt 上傳至 etc/docker/certs.d/{domain}/ 下,第一次上傳時你必須建立 domain 資料夾。如果你的 domain 是 duranhsieh.com,即建立 duranhsieh.com 資料夾。

cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/


其目錄架構如下:

/etc/docker/certs.d/
    └── yourdomain.com:port
       ├── yourdomain.com.cert  <-- Server certificate signed by CA
       ├── yourdomain.com.key   <-- Server key signed by CA
       └── ca.crt               <-- Certificate authority that signed the registry certificate



步驟 4. 完成 docker 服務憑證設定,輸入下列指令重啟 Docker Engine

systemctl restart docker



步驟 5. 因為我們更新 harbor.yml 檔案,所以我們要重啟套用設定以啟用 HTTPS,切換資料夾至 harbor 資料夾 (與 harbor.yml / install.sh 同層資料夾),輸入下列指令重新套用設定




步驟 6. 接下來我們重啟 harbor 服務,讓設定生效。

docker compose down -v
docker compose up -d



步驟 7. 使用 docker login 確認服務可以正常運作




讀者可能會發現中間設定並不困難,但對於憑證生成與設定不熟悉的人可能會嘗盡苦頭 (如我自己)。到此為止,我們終於可以正常使用 Harbor 服務了 !!