一些 docker swarm 工作节点无法拉取镜像

一些 docker swarm 工作节点无法拉取镜像

这是一个奇怪的情况;我使用 swarm 创建了一个生产环境,其中有 1 个管理器节点和 3 个工作节点。

我们正在使用我们的私有存储库在此堆栈上部署我们的服务。

问题是,当我们尝试使用下面的命令进行部署时,它会在 2 个工作人员中部署,但 1 个工作人员和经理说;“没有此图片

docker stack deploy -c leo4.yml leo4

但是当我们使用下面的命令时,3 个工作节点部署没有问题,但这次经理说:“没有此图片

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

我到目前为止所尝试的;

  • 图像手动部署适用于所有节点,包括管理器和工作者
  • 登录到我们的私人存储库说:“登录成功“。因此不存在连通性问题。
  • 手动编辑 ~/.docker/config.json 没有帮助

您认为问题可能是什么?

答案1

我遇到了类似的 swarm/registry 问题,并且正在努力解决它,因为它确实会影响 CI/CD。OCI 上有 4 个节点(3 个管理器,1 个工作器)。registry 在 swarm 中,我可以从所有节点毫无问题地从 CLI 登录/推送/拉取到私有注册表。但如果不手动将新图像拉取到每个节点,则堆栈将因“未找到图像”而无法在该节点上启动。图像被拉取到的任何地方都可以毫无问题地启动。

我很确定这是由于信任 SSL 证书或将注册表设置为“不安全”,但 traefik 正在处理我的反向代理和证书,我不知道该怎么办。参考。https://codeblog.dotsandbrackets.com/private-registry-swarm/

PortainerBE(也在 Swarm 中)能够登录注册表,但无法浏览注册表;出现“无效管理配置”的非描述性错误。有趣的是,VScode docker 扩展可以浏览注册表吗?

答案2

作为先决条件,镜像必须位于注册表中,而不是位于本地 docker 引擎中。

您需要首先运行:

docker login ${registry}

然后,从同一个终端运行:

docker stack deploy --with-registry-auth ...

通过这样做,注册表凭据将从管理器传递到工作节点。直接在工作节点上缓存的凭据将不适用,因为 Swarm 不会在该节点上的用户上下文中运行命令。如果您在 CI 中的临时节点上运行命令,则需要确保您登录的节点与您运行部署的节点相同。

如果存在 TLS 问题,您可以在整个主机上配置证书,也可以在 Docker 中按照以下方式在 /etc/docker/certs.d 中的注册表中配置证书各种指南

相关内容