在apt-get升级过程中防止Docker-Engine重启

我在Ubuntu 14.04上遇到了一个问题

每当我进行apt-get升级时,如果docker-engine有资格进行升级,它将在升级后重新启动服务。 这会导致容器重新启动。

其中一个容器是在启动过程中需要手动干预的容器,另一个容器是收集时间关键的数据,因此只有在特定时间才需要重新启动容器。

如何从这些自动重新启动中排除泊坞窗引擎服务?

例如,AFAIK,mongodb在apt-get升级后不会重启mongod,为什么docker的行为不一样?

我不完全确定mongodb是做什么的,但我确定它会在更新时重新启动。

docker引擎的问题并不是它不会重新启动,实际上它确实可以通过更新后运行以下命令来validation:

sudo service docker status 

只是它不会重启正在运行的容器。 我不完全知道为什么它会这样,因为如果服务重新启动,理论上可以将运行中的容器取回,但不pipe什么原因,都不会这样做。

有两种方法可以解决此问题。

第一个也是简单的方法来排除docker-engine的更新,如果你看到它可以手动执行更新。

 sudo apt-mark hold docker-engine sudo apt-get upgrade 

如果有更新并且更新被保留,您应该看到一个通知

 ... The following packages were kept back: docker-engine ... 

如果你有容器,你不能在升级时重新启动,你应该走这条路。

但是,如果您可以让他们重新启动,您可以使用第二种方法。 您可以在启动容器时设置重新启动策略,如下所示:

 sudo docker run --restart=always -d image-name 

这样,当docker引擎重新启动,容器启动它。 这意味着在更新时,以这种方式启动的容器会自动启动。

这是deb包中的前/后安装脚本的devise,也是构build包的人的一个决定(尽pipe把apt.dockerproject.org上的最新的jessie构build起来,我没有看到他们的控制停止文件,只有注册和启动)。

我可以做的最好的build议是,当你不能容忍任何停机的时候,不要运行系统升级。 通过仅执行下载( apt-get upgrade -d )最小化升级时间,然后在停机窗口中启动升级。 您也可以放置docker-engine软件包,使其不会使用dselect并在软件包名称上按=来自动升级。