docker 登录
描述 | 对注册表进行身份验证 |
---|---|
用法 | docker login [OPTIONS] [SERVER] |
描述
对注册表进行身份验证。
您可以对您拥有的任何公共或私有注册表进行身份验证
凭据。拉取和推送镜像可能需要身份验证。
其他命令,例如docker scout
和docker 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
命令默认使用设备代码流,除非--username
flag 指定。设备代码流是一种安全的签名方式
在。请参阅使用设备代码向 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
,get
和erase
.
这store
command 从标准输入中获取 JSON 有效负载。该有效载荷携带
服务器地址,用于标识凭据、用户名和密码
或身份令牌。
{
"ServerURL": "https://index.docker.io/v1",
"Username": "david",
"Secret": "passw0rd1"
}
如果要存储的密钥是身份令牌,则应将 Username (用户名) 设置为<token>
.
这store
命令可以将错误消息写入STDOUT
Docker 引擎
将显示是否存在问题。
这get
command 从 standard input 中获取 String payload。该有效载荷携带
Docker Engine 需要凭证的服务器地址。这是
该有效负载的示例:https://index.docker.io/v1
.
这get
命令将 JSON 有效负载写入STDOUT
.Docker 读取用户名
和 password 的 Sample:
{
"Username": "david",
"Secret": "passw0rd1"
}
这erase
command 从STDIN
.该有效载荷携带
Docker Engine 要删除其凭证的服务器地址。这是
该有效负载的示例:https://index.docker.io/v1
.
这erase
命令可以将错误消息写入STDOUT
Docker 引擎
将显示是否存在问题。
凭证帮助程序
凭据帮助程序类似于凭据存储,但 充当指定程序来处理特定注册表的凭证。 默认凭证存储将不用于与 指定注册表的凭据。
配置凭据帮助程序
如果您当前已登录,请运行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