编辑:永不终止,请参阅下面的答案
互联网上似乎对此有很多噪音(是的,我已经阅读了所有的堆栈溢出和github问题(,但对我的特定问题没有太多信号。此外,我是docker的新手,所以可能是用户错误,但没有明显的。。。。
发生了什么:
- 我为一个宠物项目创建了一个单节点群,并成功登录了ghcr和docker hub
- 我在标准mysql镜像的基础上创建了一个简单的docker镜像,并将其发布为一个私人ghcr包
- 我在本地机器上创建了一个docker上下文,指向我从群节点转发的docker套接字
- 使用该上下文,当我运行
docker image pull ghcr.io/my-name/my-image:latest
时,它运行良好,并将图像下拉到群节点 - 然后我移除图像并运行CCD_ 2(下面包括的
test.yml
(;没有这样的图像:ghcr.io/我的名字……">
这似乎与身份验证有关,但不清楚具体是什么。。。。我还测试了一个公共ghcr包,它运行良好,所以区别似乎是公共和私人。
以下是test.yml
的样子(您可以访问的任何私人ghcr包的子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
时,它不会自动提取图像,即使我可以手动成功提取图像
令人尴尬的表情-我似乎陷入了一张假阴性的网中。最后,它就像在我的部署命令中添加--with-registry-auth
一样简单,这是互联网上许多人以前说过的。我已经做了好几次了,但都不起作用,所以我以为不是这样,但不管出于什么原因,我又试了一次,现在似乎起作用了。我不喜欢把SO和副本搞得一团糟。
对于其他人,正如@Chris Becke在上面的评论中所指出的,完整的命令是:
docker stack deploy --with-registry-auth -c test.yml test
我(从Bret Fisher那里(了解到,登录只是一个客户端概念,它始终是向引擎发送身份验证信息的客户端,因此如果您通过本地docker客户端访问集群,则无需在集群所在的远程机器上运行docker login
。