Docker stack deploy 不从 ghcr 拉取镜像
Docker stack deploy doesn't pull images from ghcr
编辑:没关系,请参阅下面的答案
互联网上似乎有很多关于此的噪音(是的,我已经阅读了所有堆栈溢出和 github 问题),但没有太多关于我的特定问题的信号。另外,我是 docker 的新手,所以可能是用户错误,但是 none 很明显....
这是正在发生的事情:
- 我已经为宠物项目创建了一个单节点群并且成功登录到ghcr和docker hub.
- 我根据标准 mysql 图像创建了一个简单的 docker 图像,并将其作为私有 ghcr 包发布
- 我在我的本地机器上创建了一个 docker 上下文,指向我从 swarm 节点转发的 docker 套接字。
- 使用该上下文,当我 运行
docker image pull ghcr.io/my-name/my-image:latest
时,它工作正常并将图像下拉到 swarm 节点。
- 然后我删除了图像和 运行
docker stack deploy -c test.yml test
(test.yml
包括在下面)并且它失败了“没有这样的图像:ghcr。io/my-name .... “
它似乎确实与身份验证有关,但不清楚具体是什么......我还使用 public ghcr 包进行了测试,它运行良好,所以差异似乎是 public 与私有。
这是 test.yml
的样子(sub my-name/my-image
用于您有权访问的任何私有 ghcr 包):
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
时,它不会自动拉取镜像,即使我可以手动拉取镜像。
完全尴尬的捂脸 - 我好像陷入了false-negatives的网络中。最后就是在我的deploy命令中加上--with-registry-auth
就这么简单,之前网上很多人都说过。我已经这样做了好几次,但都没有用,所以我认为不是那样,但是出于某种原因,我又试了一次,现在似乎可以用了。我不喜欢用重复的东西把 SO 搞得一团糟。
对于其他人,正如@Chris Becke 在上面的评论中指出的那样,完整的命令将是:
docker stack deploy --with-registry-auth -c test.yml test
我(从 Bret Fisher)了解到的一点是,登录只是一个客户端概念,并且始终是客户端向引擎发送身份验证信息,所以 运行 docker login
如果您通过 local docker 客户端访问 swarm,则不需要在 swarm 所在的远程机器上。
编辑:没关系,请参阅下面的答案
互联网上似乎有很多关于此的噪音(是的,我已经阅读了所有堆栈溢出和 github 问题),但没有太多关于我的特定问题的信号。另外,我是 docker 的新手,所以可能是用户错误,但是 none 很明显....
这是正在发生的事情:
- 我已经为宠物项目创建了一个单节点群并且成功登录到ghcr和docker hub.
- 我根据标准 mysql 图像创建了一个简单的 docker 图像,并将其作为私有 ghcr 包发布
- 我在我的本地机器上创建了一个 docker 上下文,指向我从 swarm 节点转发的 docker 套接字。
- 使用该上下文,当我 运行
docker image pull ghcr.io/my-name/my-image:latest
时,它工作正常并将图像下拉到 swarm 节点。 - 然后我删除了图像和 运行
docker stack deploy -c test.yml test
(test.yml
包括在下面)并且它失败了“没有这样的图像:ghcr。io/my-name .... “
它似乎确实与身份验证有关,但不清楚具体是什么......我还使用 public ghcr 包进行了测试,它运行良好,所以差异似乎是 public 与私有。
这是 test.yml
的样子(sub my-name/my-image
用于您有权访问的任何私有 ghcr 包):
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
时,它不会自动拉取镜像,即使我可以手动拉取镜像。
完全尴尬的捂脸 - 我好像陷入了false-negatives的网络中。最后就是在我的deploy命令中加上--with-registry-auth
就这么简单,之前网上很多人都说过。我已经这样做了好几次,但都没有用,所以我认为不是那样,但是出于某种原因,我又试了一次,现在似乎可以用了。我不喜欢用重复的东西把 SO 搞得一团糟。
对于其他人,正如@Chris Becke 在上面的评论中指出的那样,完整的命令将是:
docker stack deploy --with-registry-auth -c test.yml test
我(从 Bret Fisher)了解到的一点是,登录只是一个客户端概念,并且始终是客户端向引擎发送身份验证信息,所以 运行 docker login
如果您通过 local docker 客户端访问 swarm,则不需要在 swarm 所在的远程机器上。