今天早上我醒来时收到一封来自 watchdog 的“服务已关闭”电子邮件。连接到服务器后,我发现服务docker
已关闭。经过一番调查,我发现今天早上 Ubuntu 对该containerd
服务进行了无人值守升级,升级后,docker
服务没有自动启动。
我如何确保升级后不会再发生这种情况?
答案1
我们遇到了同样的问题。我选择使用 systemd 单元文件在 containerd 和 dockerd 之间创建松散依赖关系。
就是这样:
以 root 身份:
创建覆盖目录(权限 755)
mkdir /etc/systemd/system/containerd.service.d/
在上述目录中创建覆盖文件(权限 644)
vi override.conf
将以下内容添加到文件
[Unit]
Before=docker.service
Wants=docker.service
重新启动 systemd 守护进程
systemctl daemon-reload
检查其是否有效
停止 containerd
systemctl stop containerd
检查 dockerd 是否已停止
systemctl status docker
启动 containerd
systemctl start containerd
检查dockerd已经启动
systemctl status docker
++++++++++++++++++++++++++
一些有关该主题的其他文档的链接
https://www.shellhacks.com/systemd-service-file-example/
https://man7.org/linux/man-pages/man5/systemd.service.5.html
答案2
我将 Docker 及其相关软件包设置为保留,以便它们仅在计划升级时进行升级。
sudo apt-mark hold docker containerd
当我想升级 Docker 时,我会运行apt-mark unhold
,升级软件包,然后再次保留它们。我有一个 Ansible 剧本来自动执行此过程。我的安装和配置 Docker 的剧本在安装后直接将软件包设置为保留。
答案3
这文档关于docker重启策略很有帮助,根据你的需要使用always
或者unless-stopped
选项来启动你的容器。
阻止 Ubuntu 进行无人值守升级似乎也是合理的。