在apt get升级期间防止Docker引擎重新启动

在apt get升级期间防止Docker引擎重新启动,docker,upgrade,restart,apt-get,Docker,Upgrade,Restart,Apt Get,我在Ubuntu 14.04上遇到了一个问题 每当我进行apt get升级时,如果docker引擎符合升级条件,它将在升级后重新启动服务。这会导致容器重新启动 其中一个容器在启动期间需要手动干预,其他容器正在收集时间关键型数据,因此只需要在非常特定的时间重新启动容器 如何从这些自动重启中排除docker引擎服务 例如,在apt get升级后,mongodb不会重新启动mongod,为什么docker不能以同样的方式运行呢?这是对deb包中的安装前/安装后脚本的设计,是由谁构建包来决定的(虽然在a

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

每当我进行apt get升级时,如果docker引擎符合升级条件,它将在升级后重新启动服务。这会导致容器重新启动

其中一个容器在启动期间需要手动干预,其他容器正在收集时间关键型数据,因此只需要在非常特定的时间重新启动容器

如何从这些自动重启中排除docker引擎服务


例如,在apt get升级后,mongodb不会重新启动mongod,为什么docker不能以同样的方式运行呢?

这是对deb包中的安装前/安装后脚本的设计,是由谁构建包来决定的(虽然在apt.dockerproject.org上拆分了最新的jessie构建,但我没有看到他们控制文件中的停止,只有注册和开始)


我能提出的最佳建议是,当您无法忍受任何停机时间时,不要运行系统升级。只通过下载(
apt get upgrade-d
)将升级时间降至最低之前,然后在您的停机窗口期间启动升级。您还可以将docker engine软件包置于暂停状态,这样它就不会使用dselect并在软件包名称上按=自动升级。

我不完全确定mongodb做了什么,但我非常确定它会在更新时重新启动自身

docker engine的问题不在于它不会自行重新启动,而是实际上会重新启动,您可以在更新后运行以下命令来验证这一点:

sudo service docker status
只是它不会重新启动正在运行的容器。我不知道为什么会这样,因为理论上,如果服务重新启动,它可以重新启动正在运行的容器,但不管出于什么原因,它都不会这样做

有两种方法可以解决这个问题

第一个简单的方法是排除docker引擎的更新,并在看到可用时手动执行更新

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引擎重新启动时,容器将随之启动。这意味着在更新时,以这种方式启动的容器将自动启动。

啊,好吧,我忘记了不重新启动的问题,因为我在升级之前手动关闭了所有内容,然后重新启动,执行一个启动脚本所有的容器。我想我想要的是
sudo-apt-mark-docker-machine-hold
。是docker-machine还是docker-engine?