Docker 无法在新添加的 VM/节点上下载现有服务的映像

Posted

技术标签:

【中文标题】Docker 无法在新添加的 VM/节点上下载现有服务的映像【英文标题】:Docker fails to download image of existing services on newly added VM/node 【发布时间】:2019-07-31 19:37:05 【问题描述】:

我们有一个现有的 swarm 集群,其中包含大约 20 个服务,跨越 10-15 个虚拟机。 在服务设置期间,我们使用“–with-registry-auth”选项部署它们。我们的 docker 注册表位于 AWS ECR 上。

在我们添加新节点之前一切正常。当使用现有标签添加新节点时,容器不会出现在节点上。在检查服务状态时,我可以看到消息“未找到图像”。

示例:我在 2 个带有标签代理的虚拟机上运行 nginx 映像。我再添加 1 个虚拟机并应用标签代理。 Docker swarm 尝试在这个新的第三个 VM 上再部署一个 Nginx 副本,但由于映像不存在而失败。

Twist/Pointer :如果在服务创建后 4 小时内添加了新 VM,则 nginx 会出现在新 VM 上。但是,如果在服务部署 4 小时后添加 VM(4 小时是 AWS ECR 的凭证到期时间),则映像无法在新 VM 上出现。 (图像仍然存在于管理器虚拟机上)。

为了解决这个问题,我们在每 2 小时登录一次 AWS ECR 的每台虚拟机上添加了一个 cron 作业,以便始终刷新凭证。但这也没有解决问题。

如果我使用“–with-registry-auth”从管理器节点更新 nginx,则 nginx 会出现在第三个 VM 上,即使它是在 4 小时后添加的。但这不是预期的。

还有其他人遇到过这个问题吗? 任何指导都会有所帮助

【问题讨论】:

【参考方案1】:

我面对它...

如果您的注册表仅是私有的,就会发生这种情况。

我们通过在添加节点过程中添加docker login作为阶段来解决这个问题

【讨论】:

我们甚至尝试在所有节点上每 2 小时将 docker login 添加为 cron 作业,但没有成功。

以上是关于Docker 无法在新添加的 VM/节点上下载现有服务的映像的主要内容,如果未能解决你的问题,请参考以下文章

Docker在Linux上下载与安装配置

Codedeploy 无法在新扩展的 VM 上运行

无法在新的 appDomain 中加载程序集

ApplicationManager.CreateObject 无法在新的 AppDomain 中加载程序集

docker--docker commit构建docker镜像

在 docker 中添加主机重定向