docker login

說明向 Registry 進行身份驗證
用法docker login [選項] [伺服器]

說明

向 Registry 進行身份驗證。

您可以向任何您擁有憑證的公開或私有 Registry 進行身份驗證。提取和推送映像可能需要身份驗證。其他命令,例如 `docker scout` 和 `docker build`,也可能需要身份驗證才能存取僅限訂閱的功能或與您的 Docker 組織相關的資料。

身份驗證憑證儲存在已設定的憑證儲存區中。如果您使用 Docker Desktop,憑證會自動儲存到您作業系統的原生金鑰圈中。如果您未使用 Docker Desktop,您可以在 Docker 設定檔中設定憑證儲存區,該檔案位於 Linux 上的 `$HOME/.docker/config.json` 或 Windows 上的 `%USERPROFILE%/.docker/config.json`。如果您未設定憑證儲存區,Docker 會以 base64 編碼格式將憑證儲存在 `config.json` 檔案中。這種方法不如設定和使用憑證儲存區安全。

`docker login` 也支援憑證輔助程式,以協助您處理特定 Registry 的憑證。

身份驗證方法

您可以使用使用者名稱和存取權杖或密碼向 Registry 進行身份驗證。Docker Hub 也支援基於網路的登入流程,讓您無需輸入密碼即可登入您的 Docker 帳戶。對於 Docker Hub,`docker login` 命令預設使用裝置代碼流程,除非指定了 `--username` 旗標。裝置代碼流程是一種安全的登入方式。請參閱使用裝置代碼向 Docker Hub 進行身份驗證

憑證儲存區

Docker 引擎可以將使用者憑證儲存在外部憑證儲存區中,例如作業系統的原生金鑰圈。使用外部儲存區比將憑證儲存在 Docker 設定檔中更安全。

要使用憑證儲存區,您需要一個外部輔助程式來與特定的金鑰圈或外部儲存區互動。Docker 要求輔助程式位於用戶端主機的 `$PATH` 中。

您可以從 `docker-credential-helpers` 的版本頁面pass設定憑證儲存區

您需要在 $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 的啟發,但在共享的資訊方面有所不同。

輔助程式一律使用命令中的第一個參數來識別動作。該參數只有三個可能的值:storegeterase

store 命令會從標準輸入讀取 JSON 酬載。該酬載攜帶伺服器地址(用於識別憑證)、使用者名稱以及密碼或身分識別權杖。

{
  "ServerURL": "https://index.docker.io/v1",
  "Username": "david",
  "Secret": "passw0rd1"
}

如果儲存的密鑰是身分識別權杖,則使用者名稱應設定為 <token>

如果發生問題,store 命令可以將錯誤訊息寫入 STDOUT,Docker Engine 將會顯示這些訊息。

get 命令會從標準輸入讀取字串酬載。該酬載攜帶 Docker Engine 需要其憑證的伺服器地址。以下是該酬載的範例:https://index.docker.io/v1

get 命令會將 JSON 酬載寫入 STDOUT。Docker 會從此酬載中讀取使用者名稱和密碼。

{
  "Username": "david",
  "Secret": "passw0rd1"
}

erase 命令會從 STDIN 讀取字串酬載。該酬載攜帶 Docker Engine 想要移除其憑證的伺服器地址。以下是該酬載的範例:https://index.docker.io/v1

如果發生問題,erase 命令可以將錯誤訊息寫入 STDOUT,Docker Engine 將會顯示這些訊息。

憑證輔助程式

憑證輔助程式類似於憑證儲存庫,但作為指定程式來處理特定登錄中心的憑證。預設憑證儲存庫將不會用於與指定登錄中心的憑證相關的操作。

設定憑證輔助程式

如果您目前已登入,請執行 docker logout 以從預設儲存庫中移除憑證。

憑證輔助程式的指定方式與 credsStore 類似,但允許一次設定多個輔助程式。金鑰指定登錄中心網域,值指定要使用的程式的後綴(即 docker-credential- 之後的所有內容)。例如:

{
  "credHelpers": {
    "myregistry.example.com": "secretservice",
    "docker.internal.example": "pass",
  }
}

選項

選項預設值說明
-p, --password密碼
--password-stdin從 stdin 讀取密碼
-u, --username使用者名稱

範例

使用網頁登入驗證至 Docker Hub

預設情況下,docker login 命令會使用裝置代碼流程向 Docker Hub 進行驗證。此流程可讓您在不輸入密碼的情況下向 Docker Hub 進行驗證。您只需在網頁瀏覽器中造訪一個網址,輸入代碼並進行驗證即可。

$ docker login

USING WEB-BASED LOGIN
To sign in with credentials on the command line, use 'docker login -u <username>'

Your one-time device confirmation code is: LNFR-PGCJ
Press ENTER to open your browser or submit your device code here: https://login.docker.com/activate

Waiting for authentication in the browser…

在瀏覽器中輸入代碼後,您將使用您目前在 Docker Hub 網站或 Docker Desktop 上登入的帳戶向 Docker Hub 進行驗證。如果您未登入,系統會在您輸入裝置代碼後提示您登入。

驗證至自架設的登錄中心

如果您想要驗證至自架設的登錄中心,您可以透過新增伺服器名稱來指定。

$ docker login registry.example.com

預設情況下,docker login 命令假設登錄中心監聽埠 443 或 80。如果登錄中心監聽不同的埠,您可以透過將埠號新增至伺服器名稱來指定它。

$ docker login registry.example.com:1337

**注意**

登錄中心地址不應包含 URL 路徑組件,僅包含主機名稱和(可選)埠。包含 URL 路徑組件的登錄中心地址可能會導致錯誤。例如,docker login registry.example.com/foo/ 是不正確的,而 docker login registry.example.com 是正確的。

此規則的例外情況是 Docker Hub 登錄中心,由於歷史原因,其地址中可以使用 /v1/ 路徑組件。

使用使用者名稱和密碼驗證至登錄中心

若要使用使用者名稱和密碼驗證至登錄中心,您可以使用 --username-u 旗標。以下範例使用使用者名稱 moby 驗證至 Docker Hub。密碼將以互動方式輸入。

$ docker login -u moby

使用 STDIN 提供密碼 (--password-stdin)

若要以非互動方式執行 docker login 命令,您可以設定 --password-stdin 旗標以透過 STDIN 提供密碼。使用 STDIN 可以防止密碼出現在 shell 的歷史記錄或記錄檔中。

以下範例會從檔案中讀取密碼,並使用 STDIN 將其傳遞至 docker login 命令。

$ cat ~/my_password.txt | docker login --username foo --password-stdin