docker登录在未安装X11的服务器上失败

docker登录在未安装X11的服务器上失败,docker,docker-registry,ubuntu-server,Docker,Docker Registry,Ubuntu Server,我正在尝试在私有docker注册表上部署具有映像的docker配置 现在,每次执行docker login registry.example.com,我都会收到以下错误消息: 获取凭据时出错-错误:退出状态1,退出:无法在没有X11$DISPLAY的情况下自动启动D-Bus 我为非MacOS用户找到的唯一解决方案是首先运行export$(dbus启动),但这并没有改变任何事情 我正在运行Ubuntu服务器,并尝试了Ubuntu Docker包和Docker CE包 在没有X11会话的情况下如何登

我正在尝试在私有docker注册表上部署具有映像的docker配置

现在,每次执行
docker login registry.example.com
,我都会收到以下错误消息:

获取凭据时出错-错误:退出状态1,退出:
无法在没有X11$DISPLAY的情况下自动启动D-Bus

我为非MacOS用户找到的唯一解决方案是首先运行
export$(dbus启动)
,但这并没有改变任何事情

我正在运行Ubuntu服务器,并尝试了Ubuntu Docker包和Docker CE包


在没有X11会话的情况下如何登录?

看起来是因为它默认使用
secretservice
可执行文件,出于某种原因,它似乎具有某种X11依赖性。如果您安装并配置
pass
docker将使用它,这似乎解决了问题

简而言之(从)

这将为您生成一个gpg2密钥。完成后,您可以将其与

gpg2 -k
复制密钥id(从标有
[uid]
的行中)并执行以下操作

现在
docker登录应该可以了

launchpad上记录了几个与此相关的bug:


我通过卸载从Ubuntu repo安装的
docker compose
解决了这个问题,并按照官方指示在安装了
docker compose
,这是有效的:
sudo apt删除golang docker凭证助手
secretservice
需要GUI。您可以在没有GUI的情况下使用
pass

不幸的是,Docker's很缺乏。下面是一个关于如何使用Docker(使用Ubuntu 18.04测试)配置
pass
的全面指南:

1.为
pass
  • 从中查找最新版本的
    docker credential pass
    。例如:
#替换为最新版本
网址=https://github.com/docker/docker-credential-helpers/releases/download/v0.6.2/docker-credential-pass-v0.6.2-amd64.tar.gz
#下载并解压二进制文件
wget$url
tar-xzvf$(basename$url)
#将二进制文件移动到$PATH中的目录
sudo mv docker凭证通行证/usr/local/bin
#验证它是否有效
docker凭证通行证列表
2.安装并配置
pass
apt安装过程
#创建一个gpg2密钥
gpg2—gen密钥
#如果您遇到熵不足的问题,请单击“apt install haveged”,然后重试
#使用上面的gpg用户id创建密码存储
pass init$gpg\u id
3.docker登录
docker登录
#您不应该看到“auths”部分中存储的任何凭据。
#“CredStore”:“pass”应已自动添加。
#如果值为“secretservice”,则将其替换为“pass”。
cat~/.docker/config.json
#立即验证“通过”存储中存储的凭据
通过

有一个比我在评论中找到的已经发布的答案简单得多的答案

解决方案是将docker credential secretservice重命名为不受影响的服务 e、 g:
mv/usr/bin/docker-credential-secretservice/usr/bin/docker-credential-secretservice.breaked


完成此操作后,无论是否安装docker compose,docker登录都会工作。无需添加或删除其他软件包。

在Ubuntu 18.04上帮助我的是:

  • 按照@oberstet的帖子中的步骤并卸载golang helper
  • 卸载帮助程序后执行登录
  • 通过
    sudo apt get install docker重新安装docker
  • 通过sudo docker登录重新登录

  • 您可以删除有问题的包
    golang docker凭证帮助程序
    ,而无需删除所有
    docker compose

    在未安装X11的服务器上,以下操作对我有效:

    dpkg -r --ignore-depends=golang-docker-credential-helpers golang-docker-credential-helpers
    
    
    然后

    echo 'foo' | docker login mydockerrepo.com -u dockeruser --password-stdin
    
    资料来源:

    debian中报告的错误:
    ubuntu上报告的错误:

    删除docker compose,它应该可以工作。这似乎是个错误:谢谢你的回答。我切换到debian,在那里,事情就像在我的arch-dev机器上一样工作,所以不幸的是,我无法测试您的解决方案此解决方案给了我
    警告!您的密码将未加密地存储在ubuntu18上的/home/adwised/.docker/config.json.
    中。04@MohammadMasoumi然后,
    pass
    没有正确安装,或者您的docker安装程序由于某种原因找不到它(ubuntu 18.04)“从标有
    [uid]
    的行中”的指令不正确,而是需要在标签为
    pub
    的条目中查找ID。(但答案仍然很有用,这只是供参考,以防其他使用它的人遇到相同的问题)如@Neo我得到了“警告”!json;“(在debian 10.5上),但随后是以下修复建议:配置凭证帮助程序以删除此警告。请看,包管理器的存在是linux相对于其他操作系统的巨大优势。您通常不希望在发行版的软件包管理器不知情的情况下安装软件,例如,只需下载软件并将其复制到
    /usr/bin
    或类似位置即可。很明显,你可以用一个命令更新所有软件,另一个原因是你可以依赖其他软件包。我解决了这个问题,从我的系统中删除了ubuntu,并使用了一个能够运行docker的系统(我使用debian for stable和fedora for staging)@msrd0缺少软件包系统引入的软件隔离是linux的一个巨大缺点,这也是为什么像docker这样的“黑客”仍然存在的原因。回到主题:这个问题是在Ubuntu软件包中介绍的,擦除Ubuntu不是一个解决方案,那么你建议的解决方法是什么呢?是的,你完全正确。一些发行版,如FedoraShip和selinux,但不能取代docker所做的隔离。我问了这个问题,希望找到一个可以接受的解决方法(比如更改配置文件或类似文件,而不是“禁用”包管理器),但还没有找到
    dpkg -r --ignore-depends=golang-docker-credential-helpers golang-docker-credential-helpers
    
    
    echo 'foo' | docker login mydockerrepo.com -u dockeruser --password-stdin