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

标签 docker upgrade restart apt-get

我在 Ubuntu 14.04 上遇到了问题

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

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

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

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

最佳答案

我不完全确定 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 重新启动时,容器也会随之启动。这意味着在更新时,以这种方式启动的容器会自动启动。

关于docker - 在 apt-get 升级期间防止 Docker-Engine 重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37765518/

相关文章:

尝试在本地安装 Shopware 6 时,Docker for Windows "The system cannot find the path specified"

bash - 如何知道 docker 容器是否以特权模式运行

docker - Pod 进入 CrashLoopBackOff 状态并反复重新启动 - 退出代码为 0

android - 如何在没有 SQLiteOpenHelper 的情况下升级应用程序中的 SQLite 表

ANDROID Activity 在重启时强制停止

java - 使用没有 sudo 权限的 java 重新启动运行 ubuntu 的计算机?

azure - Docker 和 AzureKeyVault : unable to load shared library 'libsecret-1.so.0'

svn - 在本地升级到SVN 1.7是否需要在存储库上升级?

reactjs - 将 React 17 更新为 React 18 - Typescript - ReactNode 类型的子代不再处理 `void` 的内联条件渲染

python - 在带有 mod_wsgi 的 Apache 上使用 Django 时必须重新启动 Apache