実行中のプロジェクトコンテナが突然停止し、コンテナログを確認するとディスクスペースが不足しており、コンテナが実行できなくなっていました。
Error response from daemon: Cannot restart container docker-p: mkdir /home/dockerData/overlay2/7bef1e2fa4788ab4d5db7e2e850d7ceeed09185b55c175f20c1500d28a0cc874d: デバイスに空き容量がありません
まずはdf -h
を使ってディスクの使用状況を確認します。
overlay 413G 413G 0 100% /home/dockerData/overlay2/fea24dfbbe9f7d6d8309....../merged
overlay 413G 413G 0 100% /home/dockerData/overlay2/7bef1e2fa4788ab4d5db....../merged
コンテナのストレージディレクトリ/home/dockerData/
(デフォルトのストレージディレクトリは/var/lib/docker
ですが、こちらは再設定したものです)が直接ディスクを使い切ってしまいました。
原因がわかれば対処は簡単です。コンテナのストレージディレクトリ/home/dockerData/
に移動し、du -sh
コマンドを使ってoverlay2
とcontainers
の 2 つのディレクトリおよびその中のファイルを確認します。containers
ディレクトリ内のコンテナファイル98bbe7f17fa335f1b6e17......
が 409G を占めていることがわかりました。
du -sh overlay2
3.7G overlay2du -sh containers/98bbe7f17fa335f1b6e17......
409G containers/98bbe7f17fa335f1b6e17......
さらにコンテナファイルを深掘りすると、原因はコンテナのログファイル98bbe7f17fa335f1b6e17......-json.log
にあることがわかりました。
このログファイルを削除した後、コンテナを再起動すると、業務が正常に戻りました。
このような事態が再発しないように、Docker デーモン/etc/docker/daemon.json
にログ記録ドライバーを設定する必要があります。具体的な内容は以下の通りです:
"log-driver":"json-file",
"log-opts":{"max-size" :"50m","max-file":"2"}
"log-driver":"json-file"
Docker のデフォルトのログ記録ドライバー。ログ形式は JSON です。
"max-size" :"50m"
ログの切り替え前の最大サイズは 50M です。
"max-file":"2"
保持する最大ログファイル数は 2 です。
設定が完了したら、docker を再起動します。
sudo systemctl daemon-reload
sudo systemctl restart docker
docker のログに関する詳細な内容については、以下のリンクを参照してください。