Docker 堆栈部署不会从 ghcr 拉取映像

Docker stack deploy doesn't pull images from ghcr

提问人:kael 提问时间:1/21/2022 最后编辑:kael 更新时间:1/23/2022 访问量:1130

问:

编辑:没关系,见下面的答案


互联网上似乎有很多关于这个问题的噪音(是的,我已经阅读了所有的堆栈溢出和 github 问题),但对于我的特定问题没有太多信号。另外,我是 docker 的新手,所以可能是用户错误,但没有一个显而易见的......

以下是正在发生的事情:

  • 我已经为一个宠物项目创建了一个单节点群,并成功登录了 ghcr 和 docker hub
  • 我基于标准 mysql 镜像创建了一个简单的 docker 镜像,并将其发布为私有 ghcr 包
  • 我已经在我的本地机器上创建了一个 docker 上下文,指向我从 swarm 节点转发的 docker 套接字。
  • 使用该上下文,当我运行时,它工作正常,并将图像拉到群节点。docker image pull ghcr.io/my-name/my-image:latest
  • 然后我删除图像并运行(包含在下面),它失败并显示“没有这样的图像:ghcr.io/my-name......”docker stack deploy -c test.yml testtest.yml

它似乎确实与身份验证有关,但不清楚具体是什么。我还使用公共 ghcr 包进行了测试,它工作正常,所以区别似乎是公共与私有的。

下面是这样的(您有权访问的任何私有 ghcr 包的子):test.ymlmy-name/my-image

version: "3.9"

services:
    test-db:
        image: ghcr.io/my-name/my-image:latest
        networks:
            - test-backend
        labels:
            test.app: test

networks:
    test-backend:
        driver: overlay

同样,问题是当我运行docker swarm deploy时,它不会自动拉取映像,即使我可以手动成功拉取映像。

docker docker-swarm

评论

0赞 Chris Becke 1/21/2022
你试过吗docker stack deploy --with-registry-auth -c ...

答:

0赞 kael 1/23/2022 #1

完全令人尴尬的脸掌 - 我似乎陷入了假阴性的网络中。最后,这就像添加到我的部署命令中一样简单,互联网上的许多人之前都说过。我已经这样做了好几次,但没有奏效,所以我认为不是这样,但无论出于何种原因,我又试了一次,现在似乎有效了。我不喜欢用重复项弄乱 SO。--with-registry-auth

对于其他人,正如 @Chris Becke 在上面的评论中指出的那样,完整的命令将是:

docker stack deploy --with-registry-auth -c test.yml test

我从 Bret Fisher 那里学到的一点是,登录只是一个客户端概念,它始终是客户端向引擎发送身份验证信息,因此如果您通过本地 docker 客户端访问 swarm,则无需在 swarm 所在的远程机器上运行。docker login