跳至主要內容

私有登錄庫

如果你的映像檔存放在私有登錄庫,執行它的機器需要憑證才能拉取。請在 私有登錄庫 區段把憑證附加到範本上:一組使用者名稱,以及一個密碼或存取權杖。

公開映像檔 —— 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 狀態。請依序檢查:

  1. 憑證是在你實際部署的那個範本上,而不是在某個副本上。
  2. 權杖尚未過期,而且具備該儲存庫的讀取權限。
  3. 映像檔參照有指明登錄庫主機,憑證才會送到正確的地方。
  4. 標籤確實存在。[Automatic] 標籤會解析成 cuda-<minor> 標籤,而私有映像檔幾乎肯定沒有發布這種標籤 —— 請釘選實際存在的標籤。

執行個體日誌中會有拉取錯誤。請參閱日誌