Ubuntu 18.04 Server下Docker 18.3 CE登录Docker Hub失败求助
解决Docker Login时的凭据获取错误(Ubuntu 18.04 Server)
我之前帮不少开发者处理过这个问题——在无GUI的Ubuntu服务器上,Docker默认会尝试调用桌面环境的凭据管理器(比如gnome-keyring)来存储登录信息,但服务器没有图形界面支撑这类工具,就会抛出你遇到的这种GDBus相关错误。下面是几种实用的解决办法:
方法1:用--password-stdin跳过凭据存储(临时快速方案)
适合单次登录或者不想折腾持久化配置的场景,能直接绕开凭据存储的问题:
- 如果你不想明文输入密码,可以用交互式方式:
执行后在终端输入密码(输入时不会显示),按回车即可完成登录。docker login --username 你的Docker Hub用户名 --password-stdin - 也可以用echo传递密码(注意密码不要泄露给他人):
echo "你的Docker Hub密码" | docker login --username 你的Docker Hub用户名 --password-stdin
方法2:配置Docker用文件存储凭据(持久化简单方案)
让Docker把登录凭据存在本地文件里,替代系统密钥环:
- 先创建Docker配置目录(如果不存在的话):
mkdir -p ~/.docker - 编辑Docker配置文件:
nano ~/.docker/config.json - 添加或修改
credsStore字段为file:
保存退出后,再执行{ "credsStore": "file" }docker login,凭据就会正常存在~/.docker/config.json里,下次操作无需重复登录。
方法3:用pass作为安全凭据存储(持久化进阶方案)
如果想要更安全的凭据存储方式,pass是Docker支持的无GUI凭据管理器:
- 安装
pass和依赖:sudo apt update && sudo apt install pass -y - 初始化
pass:如果没有GPG密钥,先执行gpg --gen-key按提示创建一个;然后用你的GPG密钥ID或邮箱初始化:pass init 你的GPG密钥ID/绑定邮箱 - 修改Docker配置文件
~/.docker/config.json,将credsStore设置为pass:{ "credsStore": "pass" } - 现在执行
docker login,凭据就会通过pass安全存储,后续操作也能自动读取。
小提示:如果之前尝试过其他凭据存储方式,建议先备份
~/.docker/config.json,再清理旧的凭据相关条目,避免冲突。
内容的提问来源于stack exchange,提问作者EastsideDev




