首页 > 解决方案 > Docker 不会在其基于的映像更新后更新 compose 中的服务容器

问题描述

我有一个基本图像,其中包含一些我很少更新的应用程序。然后我有一个更经常更新的图像,它使用该基本图像(FROM在 Dockerfile 中)。最后,我在生产服务器上有一个 docker-compose,它通过使用应用程序映像 url(到自托管注册表的 url)来组合多个服务。这些服务有不同的环境变量和命令。

当我需要在生产中更新服务时,我只构建应用程序映像(而不是基础映像)。之后,我将新图像推送到注册表并标记两次,一次带有时间戳,一次带有“最新”。

然后我进入生产服务器和docker-compose pull图像,最后进入docker-compose up -d.

我的期望是更新服务的图像,但是当我exec -it <id> bash进入服务时,我看不到文件应该更新。

不过,新图像肯定会被拉出,因为当我run -it <id> bash进入图像时,我会看到更新的文件。

标签: dockerdocker-compose

解决方案


docker-compose up --build -d使用否则启动堆栈,如果projectname_service图像已经存在,它将只运行它而不重建它需要的层。如果基础镜像被更新,它应该有一个新标签,你应该FROM在顶部更新你的语句以触发镜像的完全重建


推荐阅读