我的 docker 镜像构建在 Jenkins CI 服务器上,并被推送到我们的私有 Docker Registry。我的目标是使用 docker-compose 提供环境,它总是启动图像的原始构建状态。
我目前在不同的机器上使用 docker-compose 1.3.2 和 1.4.0,但我们之前也使用过旧版本。
我总是使用 docker-compose pull && docker-compose up -d
命令从注册表中获取新图像并启动它们。我相信我的首选行为在某个时间点按预期工作,但从那时起 docker-compose up
开始重新运行先前停止的容器,而不是每次都启动最初构建的图像。
有没有办法摆脱这种行为?这种方式是否可以在 docker-compose.yml 配置文件中连接,以在每次调用时不依赖于命令行上的“不忘记”某些内容?
附言。除了找到实现目标的方法外,我还想更多地了解这种行为的背景。我认为 Docker 的基本思想是构建一个不可变的基础设施。 docker-compose 的当前行为似乎与这种方法完全冲突.. 还是我在这里错过了一些要点?
原文由 Kristof Jozsa 发布,翻译遵循 CC BY-SA 4.0 许可协议
docker-compose up --force-recreate
是一种选择,但如果您将其用于 CI,我将使用docker-compose rm -f
开始构建以停止并删除容器和卷(然后使用 pull 和 up )。这就是我使用的:
重新创建容器的原因是为了保留可能使用的任何数据量(而且它也恰好使
up
更快)。如果您正在做 CI,您不希望这样做,因此只需删除所有内容即可满足您的需求。
更新:使用
up --build
添加在docker-compose
1.7