如何重新启动哪个映像已更改的容器?

时间:2019-05-17 11:55:43

标签: docker docker-compose

我使用MyFunction = function(){ x = rnorm(10) x <<- x^2 print("and dinosaurs are scary") y = TRUE return(invisible()) } 启动一组不相关的Docker容器。之所以使用docker-compose,是因为通过docker-compose进行配置很容易,并且该文件带来了集中式配置。

我遇到的一个问题是图像的更新,或者实际上是图像更新后的容器的更新。我通过docker-compose.yaml更新了它们,但是先前生成的容器不会自行重启。我有两种可能的解决方案,都可行,但都不理想:

  • docker-compose pull之后重新启动所有容器。这将导致不可用,这在我的家庭环境中不是至关重要的事情,但仍然如此(尤其是在重置灯光后,重新启动Home Assistant会很痛苦)
  • 编写一些代码来检查在拉动期间哪些图像ID已更改,然后重新启动相关的容器(首先将其删除)。如果没有更好的方法,这就是我将要使用的解决方案。

我想知道是否有更好的姿态。

这是一个家庭环境,因此我想避免使用诸如Kubernetes之类的重型解决方案。

群模式可以工作,但是我只是读过它,它看起来更像是一种确保状态的解决方案,而不是容器管理器(从某种意义上说,它将根据产生它们的图像的新鲜度重新启动容器)。

2 个答案:

答案 0 :(得分:3)

docker pull image之后,docker-compose -f "docker-compose.yml" up -d重新启动在docker pull之后有新版本映像的容器。它不会影响图像保持不变的容器。此设置对我来说很好。

答案 1 :(得分:1)

docker-compose up --force-recreate -d
  

如果有用于服务的现有容器,并且该服务的   容器创建后更改了配置或图像,   docker-compose up通过停止并重新创建   容器(保留已安装的卷)。防止撰写   拾取更改,请使用-no-recreate 标志。

     

如果要强制Compose停止并重新创建所有容器,请使用   -force-recreate 标志。

docker-compose up -CLI

注意:即使容器的配置和图像未更改,也要重新创建它们。