docker 登录

描述对注册表进行身份验证
用法docker login [OPTIONS] [SERVER]

描述

对注册表进行身份验证。

您可以对您拥有的任何公共或私有注册表进行身份验证 凭据。拉取和推送镜像可能需要身份验证。 其他命令,例如docker scoutdocker build,可能还需要 身份验证以访问仅限订阅的功能或与您的 Docker 组织。

身份验证凭证存储在配置的凭证中 商店。如果您使用 Docker Desktop,则凭证为 自动保存到作系统的本机钥匙串中。如果你是 不使用 Docker Desktop,您可以在 Docker 中配置凭证存储 配置文件,该文件位于$HOME/.docker/config.json在 Linux 上或%USERPROFILE%/.docker/config.json在 Windows 上。如果您没有配置 凭据存储中,Docker 将凭据存储在config.json文件包含在 base64 编码格式。此方法不如配置和使用 凭据存储。

docker login还支持凭据帮助程序提供帮助 您处理特定注册表的凭证。

身份验证方法

您可以使用用户名和访问令牌对注册局进行身份验证,或者 密码。Docker Hub 还支持基于 Web 的登录流程,该流程可让您登录 添加到您的 Docker 帐户,而无需输入密码。对于 Docker Hub,docker login命令默认使用设备代码流,除非--usernameflag 指定。设备代码流是一种安全的签名方式 在。请参阅使用设备代码向 Docker Hub 进行身份验证

凭据存储

Docker 引擎可以将用户凭证保存在外部凭证存储中, 例如作系统的本机密钥链。使用外部存储 比在 Docker 配置文件中存储凭证更安全。

要使用凭证存储,您需要一个外部帮助程序进行交互 使用特定的钥匙串或外部存储。Docker 需要 helper 程序添加到客户端的主机中$PATH.

您可以从docker-credential-helpers releases 页面。 帮助程序可用于以下凭据存储:

  • D-Bus 特勤局
  • Apple macOS 钥匙串
  • Microsoft Windows 凭据管理器
  • 通过

使用 Docker Desktop 时,凭据存储已安装并配置 给你的。除非您要更改 Docker Desktop 使用的凭证存储, 您可以跳过以下步骤。

配置凭据存储

您需要在$HOME/.docker/config.json告诉 Docker Engine 使用它。config 属性的值应为 要使用的程序的后缀(即 Everything 之后的所有内容docker-credential-). 例如,要使用docker-credential-osxkeychain:

{
  "credsStore": "osxkeychain"
}

如果您当前已登录,请运行docker logout删除 文件中的凭证,然后运行docker login再。

默认行为

默认情况下,Docker 在每个平台上查找本机Binaries,即osxkeychain在 macOS 上,wincred在 Windows 上,以及pass在 Linux 上。一个特别的 case 的 Git 是,在 Linux 上,Docker 将回退到secretservice二进制 if 它找不到pass二元的。如果这些Binaries都不存在,则 将 base64 编码的凭证存储在config.json配置文件。

凭证帮助程序协议

凭证帮助程序可以是实现凭证的任何程序或脚本 helper 协议。该协议受 Git 的启发,但不同之处在于 信息共享。

帮助程序始终使用命令中的第一个参数来标识作。 该参数只有三个可能的值:store,geterase.

storecommand 从标准输入中获取 JSON 有效负载。该有效载荷携带 服务器地址,用于标识凭据、用户名和密码 或身份令牌。

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

如果要存储的密钥是身份令牌,则应将 Username (用户名) 设置为<token>.

store命令可以将错误消息写入STDOUTDocker 引擎 将显示是否存在问题。

getcommand 从 standard input 中获取 String payload。该有效载荷携带 Docker Engine 需要凭证的服务器地址。这是 该有效负载的示例:https://index.docker.io/v1.

get命令将 JSON 有效负载写入STDOUT.Docker 读取用户名 和 password 的 Sample:

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

erasecommand 从STDIN.该有效载荷携带 Docker Engine 要删除其凭证的服务器地址。这是 该有效负载的示例:https://index.docker.io/v1.

erase命令可以将错误消息写入STDOUTDocker 引擎 将显示是否存在问题。

凭证帮助程序

凭据帮助程序类似于凭据存储,但 充当指定程序来处理特定注册表的凭证。 默认凭证存储将不用于与 指定注册表的凭据。

配置凭据帮助程序

如果您当前已登录,请运行docker logout删除 默认存储中的凭证。

凭证帮助程序的指定方式与credsStore但 允许一次配置多个帮助程序。键指定 registry domain 和 values 指定要使用的程序的后缀 (即 Everything Afterdocker-credential-).例如:

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

选项

选择违约描述
-p, --password密码
--password-stdin从 stdin 获取密码
-u, --username用户名

例子

使用基于 Web 的登录对 Docker Hub 进行身份验证

默认情况下,docker login命令向 Docker Hub 进行身份验证,使用 设备代码流。此流程允许您向 Docker Hub 进行身份验证,而无需 输入您的密码。相反,您可以在 Web 浏览器中访问 URL,然后输入 code 和身份验证。

$ 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 Hub 网站上登录时使用的帐户,或者 在 Docker Desktop 中。如果您尚未登录,系统会提示您在 输入设备代码。

对自承载注册表进行身份验证

如果要对自承载注册表进行身份验证,可以通过以下方式指定此项 添加服务器名称。

$ 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/path 组件。

使用用户名和密码对注册表进行身份验证

要使用用户名和密码对注册表进行身份验证,您可以使用--username-u旗。以下示例对 Docker Hub 进行身份验证 替换为用户名moby.密码以交互方式输入。

$ docker login -u moby

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

要运行docker login命令,则可以将--password-stdin标志以通过STDIN.用STDIN防止密码出现在 shell 的历史记录中, 或日志文件。

以下示例从文件中读取密码,并将其传递给docker login命令使用STDIN:

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