【问题标题】:docker-compose pull gives either a gpg error or a permissions error when I attempt to use it with or without sudo当我尝试使用或不使用 sudo 时,docker-compose pull 会出现 gpg 错误或权限错误
【发布时间】:2021-05-14 16:40:00
【问题描述】:

每个人。 我希望有人可以帮助回答我的问题。 我正在加入一个必须使用各种 docker 容器的项目。有人告诉我,我只需要使用 docker-compose 来拉下所有必要的容器。根据我是否使用 sudo,我尝试了这个,并得到了两个不同的错误。我的机器是 Ubuntu 仿生海狸 18.04.4LTS 我已经根据 github 页面上 Bionic 的安装说明安装了 docker-engine,并且 docker-compose 同样根据其说明进行了安装。我没有创建“docker”组,因为我有 sudo 访问权限。

我们有两个存储库,我必须先登录才能做任何事情。为了防止我的密码未加密地存储在 config.json 中,我按照本指南设置了一个安全的凭证存储: https://www.techrepublic.com/article/how-to-setup-secure-credential-storage-for-docker/

但是,登录过程不是要求我提供本文中提到的密码和/或密码短语,而是让我输入存储库的实际密码。因此,安全凭证存储可能无法正常工作,这可能会导致问题。

无论如何,一旦我登录并且两个命令显示登录成功,我就会尝试做一个 码头工人组成拉 在回购。当我做 sudo docker-compose pull 我得到了最后一个错误: docker.errors.DockerException:凭据存储错误:StoreError('凭据存储 docker-credential-pass exited with "exit status 2: gpg: WARNING: unsafe Ownership on homedir '/home/myuser/.gnupg'\ngpg: 解密失败:没有密钥”。') .gnupg 目录的 ls 是 myuser@myhost$ ls -lA ~ | grep gnupg drwx------ 4 myuser myuser 226 Feb 9 13:35 .gnupg

gpg --list-secret-keys 在我以 myuser 身份运行时显示我的密钥对。

我假设正在发生的事情是因为我以 sudo 身份运行,因此尝试访问此目录的用户是 root,而不是 myuser,因此它失败了。但是,如果我不使用 sudo 码头工人组成拉 docker.errors.DockerException: 获取服务器 API 版本时出错: ('Connection aborted.', PermissionError(13, 'Permission denied'))

我猜这是因为我的普通用户无法连接到 docker daemon 的 Unix 套接字。

那么,我该如何让它们一起玩呢?答案是添加一个 docker 组以便该命令仍以 myuser 而不是 root 身份运行吗?还是有其他方法可以做到这一点?

另外,为什么我的凭据存储不要求我输入 docker-credential-pass 或 GPG 密码设置的密码?我怀疑这两个是相关的。也许 pull 正试图再次发送我的身份验证令牌,但因为它无权访问安全凭据存储,所以无法发送。

以上都是猜测。有谁知道这里发生了什么?

提前感谢您, 布拉德

【问题讨论】:

    标签: docker-compose gnupg


    【解决方案1】:

    我只是想跟进一个对我有用的问题的解决方案。

    首先,您需要将您的用户添加到在 docker-engine 安装期间创建的 docker 组。 sudo usermod --append --groups docker your_user_name

    因为我已经使用 sudo 尝试过,所以有一些文件最终是由 root 创建的。 所以,你必须吃一些东西。 sudo chown your_user_name:your_group_name ~/.docker/config.json 请注意,对于我使用的组名 码头工人 但我不确定这是否有必要。

    然后,~/.password-store 目录中的文件需要更改。 sudo chown -R your_user_name:your_group_name ~/.password-store

    其中大部分文件已归您所有,但记录的凭据不属于您。

    然后,解决这一切的魔法。从 https://ask.csdn.net/questions/5153956 你必须这样做。 导出 GPG_TTY=$(tty)

    正是这最后一个使 gpg 工作。 然后,您可以在不使用 sudo 的情况下登录您的存储库 docker login -u repo_user_name your_repo_host 然后使用您的回购密码登录。 请注意,我不知道为什么您必须使用 repo 密码而不是使用存储的凭据。 登录后,您应该能够执行 码头工人组成拉 没有须藤 从您希望放置容器的目录中。

    请注意,您可能首先需要提供您的 GPG 密码。我不确定这一点,因为我已经按照上面链接中的步骤解锁了密钥,以检查 docker-credential-pass 是否存储了正确的凭据存储密码。 应该这样做。

    【讨论】:

    • 对于这个答案的外观,我深表歉意。当我写它的时候,命令是单独的,但是在答案中它们都和文本一起被压扁了。我不确定那里发生了什么。
    猜你喜欢
    • 2020-04-13
    • 2021-08-27
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2022-01-11
    • 2022-01-13
    相关资源
    最近更新 更多