「Docker Registry」- 登录镜像仓库

  CREATED BY JENKINSBOT

问题描述

如果想要拉取私有镜像,需要先登录到镜像仓库,这是件相当简单的事情。

但是(凡事走有但是),却会遇到各种问题。比如 Cannot autolaunch D-Bus without X11 $DISPLAY 错误。

该笔记将记录:登录 Docker 镜像仓库的方法,以及常见问题处理。

解决方法

登录镜像仓库的方法很简单:

docker login # 登录 DockerHub 仓库

# 登录私有镜像仓库
docker login http://registry.example.com

# 命令行的登录方式
echo "<password>" | docker login --username "<username>" --password-stdin http://registry.example.com

凭证存储方式

在 Docker 中,有很多凭证(在该案例中,指 docker login 凭证)存储的方式。这包括我们已知的:以 base64 编码保存在 ~/.docker/config.json 文件的 auths 字段中。除此之外,还有很多其他存储方式(比如 pass、osxkeychain 等等)。

凭证存储的默认行为

Docker == 调用 ==> Credentials Helper == 调用 ==> External Credentials Store

	Credentials Helper:在系统 $PATH 中搜索到的二进制程序。每种操作系统都有与之对应的二进制程序([[https://github.com/docker/docker-credential-helpers/releases|docker-credential-helpers/Release]]),比如 macOS 的 docker-credential-osxkeychain 程序,Windows 的 docker-credential-wincred 程序。
	External Credentials Store:后端的凭证存储服务。比如 macOS 的 Apple macOS keychain 服务、Windows 的 Microsoft Windows Credential Manager 服务。Linux 比较特殊,后面将详细说明。

我们以 macOS 为例,在存储凭证时,Docker 调用 docker-credential-osxkeychain(可在 $PATH 中搜索到的二进制程序),然后 docker-credential-osxkeychain 将调用系统的 Apple macOS keychain 来存储凭证。

我们以 Windows 为例,在存储凭证时,Docker 调用 docker-credential-wincred(可在 $PATH 中搜索到的二进制程序),然后 docker-credential-wincred 将调用系统的 Microsoft Windows Credential Manager 来存储凭证。

我们以 Linux 为例,在存储凭证时,Docker 调用 docker-credential-pass(可在 $PATH 中搜索到的二进制程序),然后 docker-credential-pass 将调用系统的 pass 命令来存储凭证。如果 pass 命令不存在,Docker 将使用 docker-credential-secretservice 来调用系统的 D-Bus Secret Service 服务来存储凭证。

当然,还可实现自己的 Credentials Helper 程序,这里就不再说明(因为我们基本用不到),参考 Credentials store/CREDENTIAL HELPER PROTOCOL 文档。

常见问题处理(凭证存储相关)

对于在 Linux 下的,Cannot autolaunch D-Bus without X11 $DISPLAY 问题,有以下几种解决方法:
1)卸载所有的 Credentials Helper 程序,迫使 Docker 使用配置文件存储凭证(Basic Auth);
2)安装对应的 Credentials Helper 程序,比如 Linux 下,安装 pass 命令:apt-get install pass
3)或者,因为 ~/.docker/config.json 使用错误的存储方式,修改 credsStore 配置;

参考文献

docker login | Docker Documentation
Releases · docker/docker-credential-helpers
docker login fails while docker-compose is installed on Ubuntu 18.04 · Issue #6023 · docker/compose
docker login fails on a server with no X11 installed – Stack Overflow
Windows7配置docker配置registry-mirrors国内镜像地址,运行hello-world
Releases · docker/docker-credential-helpers