docker login

描述認證到登錄檔
用法docker login [選項] [伺服器]

描述

認證到登錄檔。

您可以認證到您擁有憑據的任何公共或私有登錄檔。拉取和推送映象可能需要認證。其他命令,例如 `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` 還支援憑據助手,幫助您處理特定登錄檔的憑據。

認證方法

您可以使用使用者名稱和訪問令牌或密碼認證到登錄檔。Docker Hub 還支援基於 Web 的登入流程,該流程讓您無需輸入密碼即可登入 Docker 帳戶。對於 Docker Hub,`docker login` 命令預設使用裝置程式碼流程,除非指定了 `--username` 標誌。裝置程式碼流程是一種安全的登入方式。請參閱使用裝置程式碼認證到 Docker Hub

憑據儲存

Docker Engine 可以將使用者憑據儲存在外部憑據儲存中,例如作業系統的本地金鑰鏈。使用外部儲存比將憑據儲存在 Docker 配置檔案中更安全。

要使用憑據儲存,您需要一個外部助手程式來與特定的金鑰鏈或外部儲存進行互動。Docker 要求助手程式位於客戶端主機的 `$PATH` 中。

您可以從 `docker-credential-helpers` 釋出頁面下載助手。助手可用於以下憑據儲存:

  • D-Bus Secret Service
  • Apple macOS 金鑰鏈
  • Microsoft Windows 憑據管理器
  • pass

使用 Docker Desktop 時,憑據儲存已為您安裝和配置。除非您想更改 Docker Desktop 使用的憑據儲存,否則可以跳過以下步驟。

配置憑據儲存

您需要在 `$HOME/.docker/config.json` 中指定憑據儲存,以告知 Docker Engine 使用它。配置屬性的值應該是要使用的程式的字尾(即 `docker-credential-` 之後的所有內容)。例如,要使用 `docker-credential-osxkeychain`

{
  "credsStore": "osxkeychain"
}

如果您當前已登入,請執行 `docker logout` 從檔案中刪除憑據,然後再次執行 `docker login`。

預設行為

預設情況下,Docker 會在每個平臺上查詢本機二進位制檔案,即 macOS 上的 `osxkeychain`、Windows 上的 `wincred` 和 Linux 上的 `pass`。特殊情況是,在 Linux 上,如果找不到 `pass` 二進位制檔案,Docker 會回退到 `secretservice` 二進位制檔案。如果這些二進位制檔案都不存在,它會將 base64 編碼的憑據儲存在 `config.json` 配置檔案中。

憑據助手協議

憑據助手可以是任何實現憑據助手協議的程式或指令碼。此協議受 Git 啟發,但在共享資訊方面有所不同。

助手總是使用命令中的第一個引數來標識操作。該引數只有三個可能的值:`store`、`get` 和 `erase`。

`store` 命令從標準輸入接收 JSON 有效負載。該有效負載包含伺服器地址(用於識別憑據)、使用者名稱以及密碼或身份令牌。

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

如果儲存的金鑰是身份令牌,則應將使用者名稱設定為 ``。

`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密碼或個人訪問令牌 (PAT)
--password-stdin從標準輸入獲取密碼或個人訪問令牌 (PAT)
-u, --username使用者名稱

示例

透過基於 Web 的登入認證到 Docker Hub

預設情況下,`docker login` 命令使用裝置程式碼流程認證到 Docker Hub。此流程允許您無需輸入密碼即可認證到 Docker Hub。相反,您只需在 Web 瀏覽器中訪問一個 URL,輸入一個程式碼,然後進行認證。

$ 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

透過標準輸入提供密碼 (--password-stdin)

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

以下示例從檔案中讀取密碼,並使用 `STDIN` 將其傳遞給 `docker login` 命令

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