Docker:よくある問題のトラブルシューティング
コンテナが再起動を繰り返す、ポートが使用中、空き容量なし、「permission denied」、サービスが隣のサービスを見つけられない——症状とトラブルシューティング手順の表です。
更新日 2026年8月23日
コンテナの問題は、ほぼ十数個のよくある原因に集約されます。診断はいつも同じ3つのコマンドから始めます。
最初の3つのコマンド
docker compose ps
docker compose logs --tail 100 <service>
docker inspect -f '{{.State.Status}} {{.State.ExitCode}} {{.State.OOMKilled}} {{.State.Error}}' <container>
ステータス、ログの最後の数行、終了コードでほとんどの疑問は解決します。その後は、症状に応じて対処します。
症状別一覧
| 症状 | 考えられる原因 | 対処 |
|---|---|---|
常に Restarting | アプリケーションが起動時にクラッシュしている | docker compose logs --tail 200 で、最後ではなく最初のエラーを確認する |
終了コード137、OOMKilled: true | メモリ不足 | 上限を引き上げるかリークを特定する。リソース制限を参照 |
| 起動直後に終了コード1 | 設定または変数のエラー | docker compose config で変数の展開を確認する |
port is already allocated | ポートが別のプロセスに占有されている | sudo ss -tulpn | grep :<port> |
no space left on device | ディスク容量またはinodeの不足 | df -h と df -i を確認する。ディスク容量を参照 |
ボリューム上のファイルで permission denied | UIDの不一致 | docker compose exec app id を実行し、chown または PUID/PGID を設定する |
| アプリケーションからデータベースが見えない | ネットワークが異なる、または localhost へのリクエスト | Dockerネットワークを参照 |
Cannot connect to the Docker daemon | サービスが起動していない、または権限不足 | sudo systemctl status docker、docker グループを確認する |
| すべてが遅い、負荷は低い | ディスクのボトルネック | iostat -x 2 を実行する。ディスク速度を参照 |
コンテナはクラッシュするが、ログが空
これは、プロセスが何も出力する前に終了した場合に起こります。メインのコマンドではなく、シェルでイメージを手動で起動してください。
docker run --rm -it --entrypoint sh <image>
その中で起動コマンドを手動で実行すると、エラーが画面に表示されます。ついでに、設定ファイルが所定の場所にあるかも確認してください。
docker compose run --rm app cat /app/config.yaml
変更が反映されない
よくあるのは、ファイルを編集して再起動しても何も変わらないケースです。
docker compose config # does Compose see your changes
docker compose up -d --force-recreate app
docker compose exec app cat /etc/app/config.yaml
原因は通常2つです。ファイルが想定とは別の場所にマウントされているか、ビルド時にイメージへ取り込まれたコピーをコンテナが参照しているかです。
docker system prune -aで問題を解決しないでください。未使用のイメージ、ネットワーク、ビルドキャッシュが削除され、--volumesフラグを付けるとデータ入りのボリュームも削除されます。ボリュームは、そのコンテナが停止した瞬間に「未使用」と見なされます。まず原因を突き止め、その後でクリーンアップしてください。
それでもクリーンアップする場合
docker system df
docker image prune
docker builder prune
docker container prune
docker system df を実行すると、何が容量を占めているかが正確にわかります。イメージ、ビルドキャッシュ、ボリューム、コンテナログのいずれかです。通常はビルドキャッシュが原因で、削除しても安全です。
マシンが応答しない場合
SSHに接続できない、サイトが開かない — 通常はコンテナがメモリを食いつぶし、システムがスワップに移行しています。マシンパネルのコンソールからログインしてください。htop や btop には「Screen」モードが必要です。テキスト行ではウィンドウサイズが渡されないため、常に80×24になります。
free -h
sudo dmesg -T | tail -40
sudo systemctl restart docker
システムがまったく起動しない場合は、「アクセス」タブで起動モードをSystemRescueリカバリディスクに切り替えてください。マシンがそこへ再起動し、パスワードなしでrootログインでき、ディスクは /dev/sda として見えます。そこからパーティションをマウントし、データを回収できます。