containerd のアップグレード後に docker サービスが確実に開始されるようにするにはどうすればよいですか?

containerd のアップグレード後に docker サービスが確実に開始されるようにするにはどうすればよいですか?

今朝、watchdog から「サービスがダウンしています」というメールが届いて目が覚めました。サーバーに接続したところ、dockerサービスがダウンしていることがわかりました。少し調べたところ、今朝 Ubuntu がサービスの無人アップグレードを実行しcontainerd、アップグレード後にdockerサービスが自動的に開始されなかったことがわかりました。

アップグレード後にこれが再び発生しないことを確かめるにはどうすればよいでしょうか?

答え1

私たちも同じ問題を抱えていました。私は、containerd と dockerd の間に緩やかな依存関係を作成するために、systemd ユニット ファイルを使用することを選択しました。

方法は次のとおりです。

ルートとして:

オーバーライドディレクトリを作成する(権限755)

mkdir /etc/systemd/system/containerd.service.d/

上記のディレクトリにオーバーライドファイルを作成します(権限644)

vi override.conf

ファイルに以下を追加します

[Unit]
Before=docker.service
Wants=docker.service

systemdデーモンを再起動する

systemctl daemon-reload

動作確認

コンテナを停止する

systemctl stop containerd

dockerdが停止していることを確認する

systemctl status docker

コンテナを起動する

systemctl start containerd

dockerdが起動していることを確認する

systemctl status docker

++++++++++++++++++++++++++

このテーマに関する他の文書へのリンク

https://www.shellhacks.com/systemd-service-file-example/

詳しくは、man5 のマニュアルを参照してください。

答え2

Docker と関連パッケージを保留に設定して、計画されたアップグレード時にのみアップグレードされるようにしました。

sudo apt-mark hold docker containerd

Docker をアップグレードしたいときは、 を実行しapt-mark unhold、パッケージをアップグレードして、再度保留します。このプロセスを自動化する Ansible プレイブックがあります。Docker をインストールして構成するプレイブックは、インストール後すぐにパッケージを保留するように設定します。

答え3

ドキュメンテーションdocker 再起動ポリシーが役立つ場合は、使用方法に応じて、alwaysまたはオプションを使用してコンテナを起動します。unless-stopped

また、Ubuntu が無人アップグレードを実行しないようにすることも合理的であると思われます。

関連情報