问题描述
如果想要拉取私有镜像,需要先登录到镜像仓库,这是件相当简单的事情。
但是(凡事走有但是),却会遇到各种问题。比如 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 registry.example.com
凭证存储方式
在 Docker 中,有很多凭证(在该案例中,指 docker login 凭证)存储的方式。这包括我们已知的:以 base64 编码保存在 ~/.docker/config.json 文件的 auths 字段中。除此之外,还有很多其他存储方式(比如 pass、osxkeychain 等等)。
凭证存储的默认行为
Docker == 调用 ==> Credentials Helper == 调用 ==> External Credentials Store
我们以 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 配置;
Cannot autolaunch D-Bus without X11 $DISPLAY
docker login fails while docker-compose is installed on Ubuntu 18.04
docker login fails on a server with no X11 installed – Stack Overflow
问题描述
执行 docker 命令时,产生如下错误:
Cannot autolaunch D-Bus without X11 $DISPLAY
原因分析
在 Docker 中,有很多凭证(在该案例中,指 docker login 凭证)存储的方式。这包括我们已知的:以 base64 编码保存在 ~/.docker/config.json 文件的 auths 字段中。除此之外,还有很多其他存储方式(比如 pass、osxkeychain 等等)。
产生错误是因为:由于错误的默认配置,导致 Docker 使用需要在图形界面下才能运行的凭证存储工具,而我们处于命令行下,无法以图形界面来提示用户输入密码,因此产生上述错误。
解决方案
虽然导致该问题的本质原因是相同的,但是错误配置却是多种多样的,我们无法一一列举。如果想要彻底解决此类问题,需要明白 Docker 凭证存储机制,参考 docker login (Using Registry) 笔记。
参考文献
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