我的 Docker 镜像构建在 Jenkins CI 服务器上,并推送到我们的私有 Docker 注册表。我的目标是使用 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 当前的行为似乎与这种方法完全冲突..还是我在这里错过了一些要点?
docker-compose up --force-recreate
是一种选择,但如果你将它用于 CI,我会开始构建docker-compose rm -f
停止并移除容器和卷(然后按拉动和向上操作)。
这就是我使用的:
docker-compose rm -f
docker-compose pull
docker-compose up --build -d
# Run some tests
./tests
docker-compose stop -t 1
重新创建容器的原因是为了保留可能使用的任何数据卷(并且它也恰好使up
快很多)。
如果你正在做 CI,你不希望这样,所以只需删除所有内容就可以得到你想要的。
更新:使用up --build
添加到docker-compose
1.7
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)