当前位置: 首页 > 知识库问答 >
问题:

如何让docker-compose始终从新鲜图像中重新创建容器?

郑佐
2023-03-14

我的docker映像构建在Jenkins CI服务器上,并被推送到我们的专用docker注册表。我的目标是提供使用docker-compose的环境,它总是启动图像的原始构建状态。

我总是使用docker-compose pull&&docker-compose up-d命令从注册表中获取新的图像并启动它们。我相信我更喜欢的行为是在某个时间点之前按预期工作,但从那以后docker-compose up开始重新运行以前停止的容器,而不是每次都启动最初构建的映像。

有没有办法摆脱这种行为?这种方式会不会是连接在docker-compose.yml配置文件中的一种方式,以便在每次调用时都不依赖于命令行上的“不忘记”某些内容呢?

除了想办法达到我的目的,我还想知道更多关于这种行为的背景。我认为Docker的基本思想是构建一个不可变的基础设施。docker-compose当前的行为似乎与这种方法明显冲突。还是我漏了点?

共有1个答案

卞嘉许
2023-03-14

docker-compose up--force-recreate是一个选项,但如果您将它用于配置项,我将使用docker-compose rm-f启动构建,以停止并移除容器和卷(然后使用pull and up)。

这就是我使用的:

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-Compose1.7中添加的

 类似资料:
  • 问题内容: 我的Docker映像构建在Jenkins CI服务器上,并被推送到我们的私有Docker Registry。我的目标是使用docker- compose配置环境,该环境始终会启动映像的原始构建状态。 我目前在不同的机器上使用docker-compose 1.3.2和1.4.0,但是我们之前也使用了旧版本。 我总是使用命令从注册表中获取新图像并启动它们。我相信我的首选行为在某个时间点之前

  • 我为此创建了一个简单的测试项目,其中唯一的目标是获得一个版本nr以在每个新构建中增加。如果我浏览到创建的nginx服务器,就会显示版本nr(这在本地按预期工作)。 docker版本:1.11.2 docker-compose版本:1.7.1操作系统:使用docker-toolbox在CentOS 7和OS X 10.10上进行了测试 My Docker-compose.yml: 在我计算机上的一个

  • 我试着自学Docker和使用Docker compose。yml用来处理图像和合成文件。我已经成功地使用docker compose启动并运行了Wordpress图像。yml up-d通过这里的教程。。。https://docs.docker.com/compose/wordpress/),但只要我对compose文件和docker compose进行更改。yml up-d我再次无法访问更改,必须

  • 我有多个微服务,我使用docker compose进行开发部署。当microservices代码库中有一些更改时,我会触发ci作业来重新部署它们。我有下面的脚本来做这件事。但每次我都必须从头开始构建所有图像,然后运行它们。完成所有这些操作后,我得到了图像。所以我使用最后一个脚本来删除它们。你有什么建议使这个过程更实用?是否有任何方法可以更新现有图像而不使用新的更改将其删除? 其他信息:我正在使用

  • 我有一个文件,它包含4个容器:redis、postgres、api、worker 在worker的开发过程中,我经常需要重新启动它,以便应用更改。有没有什么好方法可以在不重新启动其他容器的情况下重新启动容器(例如)?