設定憑證儲存區您需要在 $HOME/.docker/config.json
中指定憑證儲存庫,以告知 Docker Engine 使用它。 config 屬性的值應該是所要使用程式的後綴(即 docker-credential-
之後的所有內容)。例如,若要使用 docker-credential-osxkeychain
如果您目前已登入,請執行 docker logout
以從檔案中移除憑證,然後再次執行 docker login
。
預設情況下,Docker 會在每個平台上尋找原生二進位檔案,例如 macOS 上的 osxkeychain
、Windows 上的 wincred
以及 Linux 上的 pass
。Linux 上的一個特例是,如果 Docker 找不到 pass
二進位檔案,它將會改用 secretservice
二進位檔案。如果這些二進位檔案都不存在,它會將 base64 編碼的憑證儲存在 config.json
設定檔中。
憑證輔助程式可以是任何實作憑證輔助程式協定的程式或腳本。此協定受到 Git 的啟發,但在共享的資訊方面有所不同。
輔助程式一律使用命令中的第一個參數來識別動作。該參數只有三個可能的值:store
、get
和 erase
。
store
命令會從標準輸入讀取 JSON 酬載。該酬載攜帶伺服器地址(用於識別憑證)、使用者名稱以及密碼或身分識別權杖。
如果儲存的密鑰是身分識別權杖,則使用者名稱應設定為 <token>
。
如果發生問題,store
命令可以將錯誤訊息寫入 STDOUT
,Docker Engine 將會顯示這些訊息。
get
命令會從標準輸入讀取字串酬載。該酬載攜帶 Docker Engine 需要其憑證的伺服器地址。以下是該酬載的範例:https://index.docker.io/v1
。
get
命令會將 JSON 酬載寫入 STDOUT
。Docker 會從此酬載中讀取使用者名稱和密碼。
erase
命令會從 STDIN
讀取字串酬載。該酬載攜帶 Docker Engine 想要移除其憑證的伺服器地址。以下是該酬載的範例:https://index.docker.io/v1
。
如果發生問題,erase
命令可以將錯誤訊息寫入 STDOUT
,Docker Engine 將會顯示這些訊息。
憑證輔助程式類似於憑證儲存庫,但作為指定程式來處理特定登錄中心的憑證。預設憑證儲存庫將不會用於與指定登錄中心的憑證相關的操作。
如果您目前已登入,請執行 docker logout
以從預設儲存庫中移除憑證。
憑證輔助程式的指定方式與 credsStore
類似,但允許一次設定多個輔助程式。金鑰指定登錄中心網域,值指定要使用的程式的後綴(即 docker-credential-
之後的所有內容)。例如:
預設情況下,docker login
命令會使用裝置代碼流程向 Docker Hub 進行驗證。此流程可讓您在不輸入密碼的情況下向 Docker Hub 進行驗證。您只需在網頁瀏覽器中造訪一個網址,輸入代碼並進行驗證即可。
在瀏覽器中輸入代碼後,您將使用您目前在 Docker Hub 網站或 Docker Desktop 上登入的帳戶向 Docker Hub 進行驗證。如果您未登入,系統會在您輸入裝置代碼後提示您登入。
如果您想要驗證至自架設的登錄中心,您可以透過新增伺服器名稱來指定。
預設情況下,docker login
命令假設登錄中心監聽埠 443 或 80。如果登錄中心監聽不同的埠,您可以透過將埠號新增至伺服器名稱來指定它。
**注意**
登錄中心地址不應包含 URL 路徑組件,僅包含主機名稱和(可選)埠。包含 URL 路徑組件的登錄中心地址可能會導致錯誤。例如,docker login registry.example.com/foo/
是不正確的,而 docker login registry.example.com
是正確的。
此規則的例外情況是 Docker Hub 登錄中心,由於歷史原因,其地址中可以使用 /v1/
路徑組件。
若要使用使用者名稱和密碼驗證至登錄中心,您可以使用 --username
或 -u
旗標。以下範例使用使用者名稱 moby
驗證至 Docker Hub。密碼將以互動方式輸入。
若要以非互動方式執行 docker login
命令,您可以設定 --password-stdin
旗標以透過 STDIN
提供密碼。使用 STDIN
可以防止密碼出現在 shell 的歷史記錄或記錄檔中。
以下範例會從檔案中讀取密碼,並使用 STDIN
將其傳遞至 docker login
命令。