MeWrite Docs

Docker: no space left on device

Dockerでディスク容量不足によるエラー

概要

Dockerを使用中にディスク容量が不足した場合に発生するエラーです。未使用のイメージ、コンテナ、ボリュームが蓄積することで発生します。

エラーメッセージ

no space left on device
Error response from daemon: no space left on device
write /var/lib/docker/...: no space left on device
failed to register layer: Error processing tar file... no space left on device

原因

  1. 未使用イメージの蓄積: 古いイメージが残っている
  2. 停止コンテナ: 停止したコンテナが削除されていない
  3. 未使用ボリューム: 孤立したボリュームが残っている
  4. ビルドキャッシュ: ビルドキャッシュが肥大化
  5. ログファイル: コンテナログの肥大化
  6. Dockerのストレージ: /var/lib/docker の肥大化

解決策

1. Docker使用量を確認

1
2
3
4
5
# Docker全体の使用量を確認
docker system df

# 詳細表示
docker system df -v

2. 全ての未使用リソースを削除

1
2
3
4
5
# 未使用のコンテナ、イメージ、ネットワーク、ボリュームを削除
docker system prune -a --volumes

# 確認なしで実行
docker system prune -a --volumes -f

3. 未使用イメージの削除

1
2
3
4
5
6
7
8
# dangling(タグなし)イメージを削除
docker image prune

# すべての未使用イメージを削除
docker image prune -a

# 特定期間より古いイメージを削除
docker image prune -a --filter "until=24h"

4. 停止コンテナの削除

1
2
3
4
5
6
7
8
# 停止しているコンテナを一覧
docker ps -a --filter "status=exited"

# 停止コンテナを削除
docker container prune

# すべての停止コンテナを強制削除
docker rm $(docker ps -a -q --filter "status=exited")

5. 未使用ボリュームの削除

1
2
3
4
5
6
7
8
# 未使用ボリュームを一覧
docker volume ls -f dangling=true

# 未使用ボリュームを削除
docker volume prune

# すべての未使用ボリュームを削除
docker volume rm $(docker volume ls -q -f dangling=true)

6. ビルドキャッシュの削除

1
2
3
4
5
# ビルドキャッシュを削除
docker builder prune

# すべてのビルドキャッシュを削除
docker builder prune -a

7. コンテナログの制限

1
2
3
4
5
6
7
8
// /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
1
2
# Docker再起動
sudo systemctl restart docker

8. docker-composeでログ制限

1
2
3
4
5
6
7
8
9
# docker-compose.yml
services:
  app:
    image: myapp
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

9. 特定コンテナのログを削除

1
2
3
4
5
# コンテナのログファイルパスを確認
docker inspect --format='{{.LogPath}}' container_name

# ログファイルを空にする(要root)
sudo truncate -s 0 /var/lib/docker/containers/<container_id>/*-json.log

10. Dockerのストレージ場所を変更

1
2
3
4
// /etc/docker/daemon.json
{
  "data-root": "/mnt/docker-data"
}
1
2
3
4
# 既存データを移動
sudo systemctl stop docker
sudo mv /var/lib/docker /mnt/docker-data
sudo systemctl start docker

11. 定期的なクリーンアップ(cron)

1
2
3
4
# /etc/cron.daily/docker-cleanup
#!/bin/bash
docker system prune -f
docker volume prune -f

12. Docker Desktop(Mac/Windows)

1
2
3
4
5
# Docker Desktopのディスク使用量を確認
# Settings > Resources > Disk image size

# 完全リセット(すべてのデータが削除される)
# Troubleshoot > Reset to factory defaults

ディスク使用量の目安

リソース対策
イメージ定期的に prune、マルチステージビルド
コンテナ–rm フラグで自動削除
ボリューム不要なボリュームを定期削除
ログサイズ制限を設定
キャッシュCI/CDで定期的にクリア

よくある間違い

  • docker system prune だけではボリュームは削除されない(--volumesが必要)
  • 本番環境で重要なボリュームを誤って削除
  • ログサイズ制限を設定せずに運用
  • CI/CDパイプラインでクリーンアップを忘れる

関連エラー

参考リンク

Docker の他のエラー

最終更新: 2025-12-13