9.1 デバッグのためのツールとコマンド
Docker Composeを使うと、マルチコンテナアプリの開発やデプロイがめっちゃ簡単になるけど、どんな技術でもトラブルが起きることがあるよね。そのためにデバッグや解決が必要になることも。このレクチャーでは、Docker Composeでアプリケーションのエラーを探してデバッグするための基本的なアプローチやツールをみていくよ。
主な問題と解決アプローチ:
- コンテナの起動に関する問題:
- コンテナのログを確認する。
- コンテナのステータスを確認する。
- 設定ファイルを確認する。
- ネットワークの問題:
- ネットワーク接続を確認する。
- コンテナ内でネットワークツールを使う。
- ボリュームの問題:
- ボリュームのマウントを確認する。
- ボリュームへのアクセス権を確認する。
デバッグのためのツールとコマンド:
1. コンテナのログを見る
コンテナログって、問題が起きたときにまず確認する場所だよね。docker compose logs
コマンドを使えば、compose.yaml
で定義された全サービスのログを確認できるよ。
docker compose logs
特定のサービスのログだけを確認したい場合は、以下のように指定してね:
docker compose logs <service_name>
2. コンテナのステータスを確認
docker compose ps
コマンドを使えば、Docker Composeで管理されているすべてのコンテナのステータス情報を表示できるよ。
docker compose ps
このコマンドの出力には、状態、ポート、コンテナIDが表示されるよ。
3. コンテナを再起動
もしコンテナが正しく動作していない場合は、再起動してみよう:
docker compose restart <service_name>
4. 動作中のコンテナに接続する
問題をもっと詳しく調査するには、docker compose exec
コマンドを使って動作中のコンテナに接続することができるよ。
docker compose exec <service_name> /bin/bash
このコマンドでコンテナ内にターミナルが開くから、診断コマンドを実行することが可能になるよ。
5. ネットワークツールを使う
コンテナ内のネットワーク接続を確認することで、ネットワーク関連の問題を診断できるよ。例えばping、curl、netcatなどのツールを使ってみてね。
docker compose exec <service_name> ping <hostname>
docker compose exec <service_name> curl http://<hostname>
docker compose exec <service_name> netcat -z -v <hostname> <port>
9.2 高度なアプローチ
エラーを探すための追加のアプローチ
1. Docker Composeファイルの確認
compose.yaml
ファイルにエラーがあると、コンテナが正しく動作しません。このコマンドを使ってファイルの構文を確認しましょう:
docker compose config
このコマンドはファイル内のエラーを確認し、最終的な構成を出力します。
2. Healthcheckの使用
サービスのコンテナの状態を自動的にチェックするために、compose.yaml
にhealthcheckを定義することができます。
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
interval: 30s
timeout: 10s
retries: 3
3. ボリュームのマウントの確認
不正なマウントや権限不足が原因でボリュームの問題が発生する可能性があります。ボリュームが正しくマウントされ、コンテナがアクセスできることを確認してください。
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
3.1 ボリュームの利用可能性の確認
ボリュームがコンテナからアクセスできるかを確認するには、コンテナを起動してコマンドを実行し、ボリュームが存在するかどうかを確認します(例: ボリューム内のファイルリスト)。ボリュームが/mnt/volumeにマウントされていると仮定します:
docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume
ボリュームがアクセス可能であれば、ls
コマンドがボリューム内のファイルとディレクトリのリストを出力します。ボリュームがアクセスできない場合や空の場合、対応するメッセージが表示されます。
3.2 ボリューム内の空きスペースの確認
コンテナ内でボリュームの空きスペースを確認するには、df
コマンドを使用します:
docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume
このコマンドは、ボリュームがマウントされているファイルシステムで利用可能なスペースを表示します。-h
オプションは、MBやGBなどの単位で読みやすい形式で出力します。
4. IDEの使用
デバッグを簡単にするには、デバッグ機能とロギングが有効になったIDEを使用してください。同時に開発と本番環境のための個別の構成ファイルを作成し、--file
オプションを使用して指定することができます。
docker compose --file docker-compose.dev.yml up
重要!
IntelliJ IDEAを使用してDocker内で実行されているアプリケーションをリモートデバッグするためのセットアップに関する便利なガイドはこちら: リモートデバッグのセットアップ .
5. 環境変数の確認
不正確または欠損している環境変数は問題を引き起こす可能性があります。必要なすべての変数が.env
ファイルまたはcompose.yaml
内で指定されていることを確認してください。
version: '3.8'
services:
app:
image: myapp:latest
environment:
- APP_ENV=development
- DEBUG=true
9.3 デバッグコマンド例
デバッグに使うコマンド例
例 1: データベース接続エラーの確認と修正
web
サービスのログを表示:
docker compose logs web
web
とdb
間のネットワーク接続の確認:
docker compose exec web ping db
docker compose exec web curl http://db:5432
web
コンテナに接続して診断:
docker compose exec web /bin/bash
例 2: ボリュームの問題の確認
ボリュームのマウント状況を確認:
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
db
コンテナに接続してデータを確認:
docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
GO TO FULL VERSION