トラブルシューティング・Tips
クリーンアップ系コマンド
Dockerを使い続けると、使われていないイメージやコンテナがたまります。定期的な掃除が重要です。
# ディスク使用量を確認
docker system df
# 詳細情報を表示
docker system df -v
# 未使用の全リソースを一括削除
docker system prune
# 未使用イメージも含めて削除
docker system prune -a
# ボリュームも含めて削除(注意)
docker system prune -a --volumes
# 確認なしで実行
docker system prune -af ✓ 定期的にpruneを実行してディスク容量を節約
✗ --volumesオプションはデータベースデータを削除する可能性があるので注意
コンテナのクリーンアップ
# 停止中のコンテナを全て削除
docker container prune
# 全コンテナを停止
docker stop $(docker ps -q)
# 全コンテナを削除
docker rm $(docker ps -aq)
# 実行中の全コンテナを強制停止・削除
docker rm -f $(docker ps -aq) イメージのクリーンアップ
# 未使用イメージを削除
docker image prune
# タグなしイメージ(dangling)を削除
docker image prune
# 未使用の全イメージを削除
docker image prune -a
# タグなしイメージのみ一括削除
docker rmi $(docker images -f "dangling=true" -q)
# 全イメージを削除(注意)
docker rmi $(docker images -q) ボリュームの管理
# ボリューム一覧
docker volume ls
# ボリュームの詳細情報
docker volume inspect ボリューム名
# ボリュームを作成
docker volume create my-volume
# 未使用ボリュームを削除
docker volume prune
# 特定のボリュームを削除
docker volume rm ボリューム名
# 全ボリュームを削除(非常に危険)
docker volume rm $(docker volume ls -q) ※ ボリュームはデータを保持するため、削除前に必ず確認してください。
ネットワークの管理
# ネットワーク一覧
docker network ls
# ネットワークの詳細情報
docker network inspect bridge
# ネットワークを作成
docker network create my-network
# コンテナをネットワークに接続
docker network connect my-network コンテナ名
# コンテナをネットワークから切断
docker network disconnect my-network コンテナ名
# 未使用ネットワークを削除
docker network prune
# ネットワークを削除
docker network rm my-network よくあるトラブルと対処法
ポートがすでに使用されている
# エラー例: Error starting userland proxy: listen tcp4 0.0.0.0:8080: bind: address already in use
# 対処方法1: 使用中のプロセスを確認
lsof -i :8080
# または
netstat -an | grep 8080
# 対処方法2: 別のポートを使用
docker run -d -p 8081:80 nginx
# 対処方法3: 使用中のコンテナを停止
docker ps | grep 8080
docker stop コンテナ名 イメージが削除できない
# エラー例: Error response from daemon: conflict: unable to remove repository reference
# 対処方法1: 使用中のコンテナを確認・削除
docker ps -a | grep イメージ名
docker rm -f コンテナ名
# 対処方法2: 強制削除
docker rmi -f イメージID コンテナが起動しない
# ログを確認
docker logs コンテナ名
# 詳細情報を確認
docker inspect コンテナ名
# イベントを確認
docker events --since 1h
# コンテナを再作成
docker rm コンテナ名
docker run [OPTIONS] イメージ名 ボリュームのパーミッションエラー
# エラー例: Permission denied
# 対処方法1: ユーザーIDを指定
docker run -u $(id -u):$(id -g) -v $(pwd):/app イメージ名
# 対処方法2: ホスト側のパーミッションを変更
chmod -R 755 ./data
# 対処方法3: SELinuxが原因の場合(Linux)
docker run -v $(pwd):/app:z イメージ名 Dockerデーモンが起動しない
# Dockerデーモンの状態確認
sudo systemctl status docker
# Dockerデーモンを再起動
sudo systemctl restart docker
# Dockerデーモンを有効化
sudo systemctl enable docker
# macOS/Windowsの場合:Docker Desktopを再起動 便利なTips
コンテナ内でシェルを起動
# bashを起動
docker exec -it コンテナ名 bash
# shを起動(Alpine Linuxなど)
docker exec -it コンテナ名 sh
# rootユーザーで接続
docker exec -it -u root コンテナ名 bash
# 新規コンテナでシェル起動
docker run -it --rm ubuntu bash ログを見やすく表示
# リアルタイムでログを追跡
docker logs -f コンテナ名
# 最新100行を表示
docker logs --tail 100 コンテナ名
# タイムスタンプ付きで表示
docker logs -t コンテナ名
# 特定時間以降のログ
docker logs --since 2h コンテナ名
docker logs --since 2024-01-01T00:00:00 コンテナ名 コンテナのリソース使用状況を監視
# 全コンテナのリソース使用状況
docker stats
# 特定コンテナのみ監視
docker stats コンテナ名
# ストリームしない(一回のみ表示)
docker stats --no-stream
# 実行中のプロセスを表示
docker top コンテナ名 ファイルのコピー
# ホストからコンテナへ
docker cp ./local-file.txt コンテナ名:/path/to/
# コンテナからホストへ
docker cp コンテナ名:/path/to/file.txt ./
# ディレクトリごとコピー
docker cp コンテナ名:/app/logs ./logs イメージのエクスポート・インポート
# イメージをtarファイルに保存
docker save -o my-image.tar イメージ名
# tarファイルからイメージを読み込み
docker load -i my-image.tar
# 複数イメージを一括保存
docker save -o images.tar イメージ1 イメージ2 エイリアスを使用した短縮コマンド
# ~/.bashrc または ~/.zshrc に追加
# コンテナ一覧
alias dps='docker ps'
alias dpsa='docker ps -a'
# クリーンアップ
alias dprune='docker system prune -af'
# コンテナを停止・削除
alias dstop='docker stop $(docker ps -q)'
alias drm='docker rm $(docker ps -aq)'
# Docker Compose
alias dc='docker compose'
alias dcu='docker compose up -d'
alias dcd='docker compose down'
alias dcl='docker compose logs -f' セキュリティのベストプラクティス
- rootユーザーを避ける:コンテナ内では非rootユーザーを使用
- 最小限のイメージを使用:Alpine Linuxなど軽量イメージを選ぶ
- イメージを定期的に更新:セキュリティパッチを適用
- シークレットをハードコードしない:環境変数やDocker Secretsを使用
- コンテナのリソースを制限:
--memoryや--cpusで制限
デバッグ用コマンド
# コンテナの全詳細情報をJSON形式で表示
docker inspect コンテナ名
# 特定の情報だけ抽出
docker inspect --format='{{.NetworkSettings.IPAddress}}' コンテナ名
# コンテナのプロセス一覧
docker top コンテナ名
# コンテナの変更点を確認
docker diff コンテナ名
# イメージの履歴を確認
docker history イメージ名