私有登錄庫
如果你的映像檔存放在私有登錄庫,執行它的機器需要憑證才能拉取。請在 私有登錄庫 區段把憑證附加到範本上:一組使用者名稱,以及一個密碼或存取權杖。
公開映像檔 —— Docker Hub、GHCR 公開套件、Superheat 基礎映像檔 —— 這裡什麼都不用填。
加入憑證
| 欄位 | 可接受的內容 | 備註 |
|---|---|---|
| 使用者名稱 | 最多 256 個字元 | API 會以 registry_user 回傳。 |
| 密碼 / 權杖 | 最多 1,000 個字元 | 唯寫。任何端點都不會回傳它。 |
只要登錄庫有提供,就使用範圍受限的存取權杖,而不是帳號密碼 —— 例如具備 read:packages 的 GitHub 個人存取權杖、AWS ECR 權杖,或登錄庫專屬的部署權杖。
登錄庫主機是從映像檔參照推導出來的,不需另外輸入。第一段路徑若含有點或冒號就會被視為主機,所以 ghcr.io/acme/trainer 會向 ghcr.io 驗證,而 acme/trainer 則向 Docker Hub 驗證。
密碼如何儲存
密碼會先用一把以部署機密形式保管的應用程式金鑰加密,才寫入資料庫。它只會在一個時刻被解密:部署把你的範本編譯成一次啟動時,好讓主機能登入並拉取映像檔。
它絕不會出現在 API 回應中、絕不會在主控台上顯示,也絕不會包含在分享出去的配方裡。API 對外揭露的只有一個布林值:
{
"registry_user": "acme-ci",
"has_registry_password": true
}
編輯表單也反映同一件事 —— 當已經存有密碼時,密碼欄位會顯示 •••••• (unchanged) 這樣的佔位文字。
更新與清除
編輯時,密碼欄位留白代表 維持原狀。要輪替密碼,就輸入新的。要完全移除憑證,請透過 API 送出 registry_password: null 並清空使用者名稱。
更改使用者名稱會重新產生範本的 hash_id,因為使用者名稱是啟動配方的一部分。只更改密碼則不會 —— 儲存的機密值刻意被排除在雜湊範圍之外,所以輪替權杖不會弄壞釘選的分享連結。
分享與複製
registry_user 是配方的一部分,任何能讀取該範本的人都讀得到。受保護的只有密碼。不要使用本身就敏感的使用者名稱,也不要以為把範本設為公開後登錄庫帳號還能維持私密。
複製一個不屬於你組織的範本時,副本中的使用者名稱與密碼都會被移除。複製的人從來就沒有讀取密碼的權限,而繼承副本的擁有權也不該給他這個權限。啟動前請在副本上填入你自己的憑證。複製你已經擁有的範本則會保留這些資料。
拉取失敗時
映像檔無法拉取的執行個體不會進入 running 狀態。請依序檢查:
- 憑證是在你實際部署的那個範本上,而不是在某個副本上。
- 權杖尚未過期,而且具備該儲存庫的讀取權限。
- 映像檔參照有指明登錄庫主機,憑證才會送到正確的地方。
- 標籤確實存在。
[Automatic]標籤會解析成cuda-<minor>標籤,而私有映像檔幾乎肯定沒有發布這種標籤 —— 請釘選實際存在的標籤。
執行個體日誌中會有拉取錯誤。請參閱日誌。