
今朝、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
++++++++++++++++++++++++++
このテーマに関する他の文書へのリンク
答え2
Docker と関連パッケージを保留に設定して、計画されたアップグレード時にのみアップグレードされるようにしました。
sudo apt-mark hold docker containerd
Docker をアップグレードしたいときは、 を実行しapt-mark unhold
、パッケージをアップグレードして、再度保留します。このプロセスを自動化する Ansible プレイブックがあります。Docker をインストールして構成するプレイブックは、インストール後すぐにパッケージを保留するように設定します。
答え3
のドキュメンテーションdocker 再起動ポリシーが役立つ場合は、使用方法に応じて、always
またはオプションを使用してコンテナを起動します。unless-stopped
また、Ubuntu が無人アップグレードを実行しないようにすることも合理的であると思われます。