再起動したタイミングで、突然Dockerが動かなくなりました。
systemctlコマンドで状態を確認すると、「Start request repeated too quickly.」というメッセージが。
対応方法を記録しておこうと思います。
Dockerが起動しない場合の対応例
システムの更新
起動しなくなったのは、こちらの記事のRaspberry Piになります。
OSはRaspberry Pi OSの64ビット版です。
まずは、OSを最新の状態の更新しました。
sudo apt update
sudo apt upgrade -y
sudo systemctl restart docker.service
「too quickly.」は改善しませんでした。
dockerの再インストール
dockerを再インストールしてみました。
sudo apt remove docker
sudo apt install docker
こちらも意味はありませんでした。
というわけで、パッケージ(docker)に問題はなく、システム(OSとRaspberry Pi)またはdockerの動作環境のどちらかが怪しい、という感じになってきました。
ファームウェア更新
システム側の問題の場合、ファームウェアを更新すると改善する場合があります。
こちらのコマンドで更新が可能ですが。
sudo rpi-update
ファームウェアが格納された/bootディレクトリは読み込み専用のため、エラーが出て失敗します。
こちらの記事と同様に、/bootを書き込み可能なオプションで再マウントしてから、ファームウェアを更新します。
こちらのコマンドになります。
sudo mount -o rw,remount /boot
sudo rpi-update
今度はエラーは表示されず、/bootディレクトリの内容が最新に更新されたようです。
Raspberry Piを再起動して、dockerが起動するか確認します。
sudo reboot
sudo systemctl status docker.service
しかしおうちのRaspberry Piは、ファームウェアを更新してもdockerが起動しませんでした。
docker実行環境のクリア
too quicklyエラーで起動しない場合の対処方法は、公式ページのこちらに情報がありました。
既定では、dockerの実行環境は、/var/lib/dockerディレクトリになります。
そこにはダウンロードしたイメージやコンテナやボリュームが格納されています。
公式ページの情報にあります、/etc/docker/daemon.jsonファイルを作成する意味ですが、この実行環境を、別のディレクトリに移す内容になります。
sudo vi /etc/docker/daemon.json
内容はこちらになります。
{
"data-root": "/docker"
}
jsonファイル作成後、dockerを起動します。
sudo systemctl status docker.service
今度は正常にdockerが起動しました。
しかし注意点があります。実行環境を移したため、コンテナやボリュームの内容はすべてクリーンな初期状態になり、過去のデータが消えたかたちになりますので、注意が必要です。
以上で、とりあえずdocker本体は起動するようになりました。
環境がごっそり初期化される形ですが、そもそもdocker本体が動かなければ、環境を戻すことも何もできないため、仕方がない対応かと思います。
元の環境にデータがあった場合、docker起動後に元に戻す作業が必要になりますが。
うーむ。また再発する可能性もあるのでは?と思ってしまいます。
・・・・
dockerって大丈夫なのでしょうかね?
podmanへの移行も考えたいなと思いました。