我的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配置文件不依赖“不忘记”的命令行上的东西每次调用?

ps.除了想办法实现我的目标,我也很想多了解一下这种行为的背景。我认为Docker的基本思想是构建一个不可变的基础设施。docker-compose当前的行为似乎与这种方法明显冲突。还是我漏掉了什么?


当前回答

再加上-force- rebuild, 你也可以考虑使用这个标志:

 -V, --renew-anon-volumes   Recreate anonymous volumes instead of retrieving
                            data from the previous containers.

我不确定从哪个版本这个标志是可用的,所以检查你的docker-compose -帮助如果你有或没有

其他回答

此外,如果组合有几个服务,我们只想强制构建其中一个:

docker-compose build --no-cache <service>
$docker-compose build

如果有新的东西,它将被重建。

唯一对我有效的解决方案是——no-cache标志:

docker-compose build --no-cache

这将自动从repo中提取一个新的映像。它也不会使用预先构建的带有您以前使用过的任何参数的缓存版本。

docker-compose up --build --force-recreate
docker-compose up --build  # still use image cache

OR

docker-compose build --no-cache  # never use cache