troubleshoot について
troubleshootは、Dockerの一般的な問題を診断・解決するスキルで、Docker Composeサービスを管理する開発者や運用担当者向けです。起動、ネットワーク、権限、データ永続化、ヘルスチェックの診断コマンドと対処法をまとめています。
主な機能
- 01コンテナの起動失敗を診断
- 02ネットワークとポート競合を調査
- 03権限とデータ永続化の問題に対処
- 04ヘルス状態とディスク容量を確認
- 05Docker Composeのトラブルシューティングコマンド
活用シーン
- 01Composeコンテナが起動しない原因を特定
- 02コンテナ間通信やポート競合を調査
- 03データ消失、権限、ヘルスチェックの問題を調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mwguerra/ claude-code-plugins --skill troubleshootインストール後、Claude Code で/troubleshootを入力して読み込まれたか確認します。
詳細
Docker トラブルシューティングスキル
概要
このスキルは、Docker でよくある問題の診断と解決に役立ちます。
- コンテナーの起動失敗
- ネットワークの問題
- 権限エラー
- ポートの競合
- データの永続化に関する問題
- ヘルスチェックの失敗
プロセス
1. ドキュメントを参照する
関連ドキュメントを読みます。
- よくある問題については
17-troubleshooting.md - ポートの問題については
15-port-conflicts.md - 再起動の問題については
16-restart-strategies.md
2. 問題を診断する
情報を収集します。
# Check container status
docker compose ps -a
# View logs
docker compose logs servicename
# Check configuration
docker compose config
# Inspect container
docker inspect containername
3. 解決策を適用する
よくある問題と解決策
コンテナーが起動しない
診断:
docker compose logs servicename
docker inspect --format='{{.State.ExitCode}}' containername
解決策:
- ログでエラーメッセージを確認する
- 設定の構文を確認する
- 依存サービスが実行中か確認する
- イメージが存在するか確認する
ポートがすでに使用中
診断:
lsof -i :3000
# or
netstat -tulpn | grep 3000
解決策:
# Kill process
kill $(lsof -t -i:3000)
# Or change port in compose
ports:
- "3001:3000"
権限が拒否される
診断:
docker compose exec app ls -la /app/data
解決策:
# Fix in compose
services:
app:
user: "1000:1000"
# Or fix in container
docker compose exec -u root app chown -R appuser:appgroup /app/data
データが消える
診断:
docker volume ls
docker compose config | grep -A5 "volumes:"
解決策:
# Use named volumes instead of anonymous
volumes:
- postgres_data:/var/lib/postgresql/data # Named (persists)
# NOT: - /var/lib/postgresql/data # Anonymous (deleted)
コンテナーから別のコンテナーに接続できない
診断:
docker network inspect networkname
docker compose exec app ping db
docker compose exec app nslookup db
解決策:
# Ensure same network
services:
app:
networks:
- backend
db:
networks:
- backend
networks:
backend:
ヘルスチェックが失敗する
診断:
docker inspect --format='{{json .State.Health}}' containername | jq
解決策:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s # Give time to start
ディスク容量不足
診断:
docker system df
docker system df -v
解決策:
# Clean unused resources
docker system prune -a --volumes
ビルドキャッシュの問題
解決策:
docker compose build --no-cache
docker builder prune -a
デバッグコマンド
# Shell into running container
docker compose exec app sh
# Shell into failed container
docker compose run --entrypoint sh app
# View resource usage
docker stats
# View container processes
docker compose top
# View real-time events
docker events
# Copy files from container
docker compose cp app:/app/logs ./logs
すばやく確認するためのチェックリスト
- コンテナーが実行中か確認する:
docker compose ps - ログを確認する:
docker compose logs servicename - ネットワークを確認する:
docker network ls - ボリュームを確認する:
docker volume ls - リソースを確認する:
docker stats - 設定を検証する:
docker compose config - ディスク容量を確認する:
docker system df
エラーメッセージのリファレンス
| エラー | 原因 | 解決策 |
|---|---|---|
| "port is already allocated" | ポートが使用中 | プロセスを終了するか、ポートを変更する |
| "network not found" | ネットワークがない | ネットワークを作成するか、名前を確認する |
| "volume not found" | ボリュームがない | ボリュームを作成するか、名前を確認する |
| "no such service" | サービス名の誤記 | compose.yaml を確認する |
| "unauthorized" | 認証の問題 | docker login |
| "image not found" | イメージがない | docker compose pull |
| "permission denied" | ファイル権限 | 所有者または権限を修正する |
| "out of memory" | メモリー制限 | 制限を引き上げるか、アプリを最適化する |
コメント
Markdown 対応