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