提问人:kael 提问时间:1/21/2022 最后编辑:kael 更新时间:1/23/2022 访问量:1130
Docker 堆栈部署不会从 ghcr 拉取映像
Docker stack deploy doesn't pull images from ghcr
问:
编辑:没关系,见下面的答案
互联网上似乎有很多关于这个问题的噪音(是的,我已经阅读了所有的堆栈溢出和 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 test
test.yml
它似乎确实与身份验证有关,但不清楚具体是什么。我还使用公共 ghcr 包进行了测试,它工作正常,所以区别似乎是公共与私有的。
下面是这样的(您有权访问的任何私有 ghcr 包的子):test.yml
my-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
时,它不会自动拉取映像,即使我可以手动成功拉取映像。
答:
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
评论
docker stack deploy --with-registry-auth -c ...