docker 登录
| 描述 | 向仓库进行认证 |
|---|---|
| 用法 | docker login [OPTIONS] [SERVER] |
描述
向仓库进行认证。
您可以使用凭据向任何公共或私有注册表进行身份验证。拉取和推送镜像可能需要进行身份验证。其他命令,例如 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 也支持
credential helpers 以帮助
您处理特定镜像仓库的凭证。
认证方式
您可以使用用户名和访问令牌或密码向仓库进行身份验证。Docker Hub 还支持基于网页的登录流程,该流程无需输入密码即可登录您的 Docker 账户。对于 Docker Hub,除非指定了 --username 标志,否则 docker login 命令默认使用设备代码流程。设备代码流程是一种安全的登录方式。请参阅
使用设备代码向 Docker Hub 进行身份验证。
凭证存储
Docker 引擎可以将用户凭据保存在外部凭据存储中,例如操作系统的原生钥匙串。使用外部存储比将凭据存储在 Docker 配置文件中更安全。
要使用凭据存储,您需要一个外部辅助程序来与特定的钥匙串或外部存储进行交互。Docker 要求该辅助程序位于客户端主机的 $PATH 中。
您可以从 docker-credential-helpers
发布页面下载助手。
助手可用于以下凭据存储:
- D-Bus 密钥服务
- 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 会在每个平台上查找原生Binaries,即 macOS 上的 osxkeychain,Windows 上的 wincred,以及 Linux 上的 pass。一个特殊情况是,在 Linux 上,如果 Docker 找不到 pass Binaries,它会回退到 secretservice Binaries。如果这些Binaries都不存在,它会将 base64 编码的凭据存储在 config.json 配置文件中。
凭据助手协议
凭据助手可以是任何实现了凭据助手协议的程序或脚本。该协议受到 Git 的启发,但在共享的信息方面有所不同。
帮助程序始终使用命令中的第一个参数来标识操作。
该参数只有三个可能的值:store、get 和 erase。
store 命令从标准输入接收 JSON 负载。该负载包含服务器地址(用于标识凭据)、用户名以及密码或身份令牌。
{
"ServerURL": "https://index.docker.io/v1",
"Username": "david",
"Secret": "passw0rd1"
}如果存储的机密是身份令牌,则用户名应设置为
<token>。
store 命令可以将错误消息写入 STDOUT,如果出现问题,Docker 引擎将显示这些消息。
get 命令从标准输入接收一个字符串负载。该负载包含 Docker 引擎需要凭据的服务器地址。这是该负载的一个示例:https://index.docker.io/v1。
get 命令将 JSON 负载写入 STDOUT。Docker 从该负载中读取用户名和密码:
{
"Username": "david",
"Secret": "passw0rd1"
}erase 命令从 STDIN 获取字符串负载。该负载包含 Docker 引擎想要移除凭据的服务器地址。这是该负载的一个示例:https://index.docker.io/v1。
erase 命令可以将错误消息写入 STDOUT,如果出现问题,Docker 引擎将显示这些消息。
凭证助手
凭证助手类似于 凭证存储,但 充当指定程序来处理特定注册表的凭证。 对于涉及指定注册表凭证的操作, 将不会使用默认凭证存储。
配置凭证助手
如果您当前已登录,请运行 docker logout 以从默认存储中移除凭据。
凭证助手的指定方式与 credsStore 类似,但允许同时配置多个助手。键指定注册表域,值指定要使用的程序的后缀(即 docker-credential- 之后的所有内容)。例如:
{
"credHelpers": {
"myregistry.example.com": "secretservice",
"docker.internal.example": "pass",
}
}选项
| 选项 | 默认 | 描述 |
|---|---|---|
-p, --password | 密码 | |
--password-stdin | 从标准输入获取密码 | |
-u, --username | 用户名 |
示例
通过基于 Web 的登录认证到 Docker Hub
默认情况下,docker login 命令使用设备码流程向 Docker Hub 进行身份验证。此流程允许您在无需输入密码的情况下向 Docker Hub 进行身份验证。取而代之的是,您在网络浏览器中访问一个 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
通过 STDIN 提供密码 (--password-stdin)
要以非交互方式运行 docker login 命令,您可以设置
--password-stdin 标志以通过 STDIN 提供密码。使用
STDIN 可以防止密码出现在 shell 的历史记录或日志文件中。
下面的示例从文件中读取密码,并使用 STDIN 将其传递给 docker login 命令:
$ cat ~/my_password.txt | docker login --username foo --password-stdin