在apt-get升级期间阻止Docker-Engine重启

时间:2016-06-11 15:37:40

标签: docker upgrade restart apt-get

我在这里遇到了Ubuntu 14.04的问题

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

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

如何从这些自动重启中排除docker-engine服务?

例如,aFAIK,mongodb,在apt-get升级后没有重启mongod,为什么docker的行为方式不一样呢?

2 个答案:

答案 0 :(得分:4)

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

docker-engine的问题并不在于它不会自动重启,实际上它可以通过在更新后运行以下命令来验证:

sudo service docker status

只是它没有重新启动正在运行的容器。我不确切地知道为什么它必须是这样的,因为理论上它可以在服务重新启动时带回运行的容器,但无论出于何种原因,它都不会这样做。

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

排除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-engine重新启动时,容器就会启动它。这意味着在更新时,以这种方式启动的容器会自动启动。

答案 1 :(得分:1)

这是deb软件包中的前/后安装脚本的设计,以及构建软件包的人的决定(尽管在apt.dockerproject.org上拆分最新的jessie构建,我没有看到内部停止他们的控制文件,只有寄存器和开始)。

我可以提出的最佳建议是,当您无法忍受任何停机时,不要运行系统升级。通过以前只进行下载(apt-get upgrade -d),然后在停机窗口中启动升级,最大限度地缩短升级时间。您也可以将docker-engine软件包置于保持状态,以便不会使用dselect自动升级并按包名称上的=。