CodeGym /コース /Docker SELF /Docker Composeでのアプリケーションデバッグ

Docker Composeでのアプリケーションデバッグ

Docker SELF
レベル 16 , レッスン 3
使用可能

9.1 デバッグのためのツールとコマンド

Docker Composeを使うと、マルチコンテナアプリの開発やデプロイがめっちゃ簡単になるけど、どんな技術でもトラブルが起きることがあるよね。そのためにデバッグや解決が必要になることも。このレクチャーでは、Docker Composeでアプリケーションのエラーを探してデバッグするための基本的なアプローチやツールをみていくよ。

主な問題と解決アプローチ:

  1. コンテナの起動に関する問題:
    • コンテナのログを確認する。
    • コンテナのステータスを確認する。
    • 設定ファイルを確認する。
  2. ネットワークの問題:
    • ネットワーク接続を確認する。
    • コンテナ内でネットワークツールを使う。
  3. ボリュームの問題:
    • ボリュームのマウントを確認する。
    • ボリュームへのアクセス権を確認する。

デバッグのためのツールとコマンド:

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. ネットワークツールを使う

コンテナ内のネットワーク接続を確認することで、ネットワーク関連の問題を診断できるよ。例えばpingcurlnetcatなどのツールを使ってみてね。

ターミナル

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を定義することができます。

Yaml

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. ボリュームのマウントの確認

不正なマウントや権限不足が原因でボリュームの問題が発生する可能性があります。ボリュームが正しくマウントされ、コンテナがアクセスできることを確認してください。

Yaml

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内で指定されていることを確認してください。

Yaml

version: '3.8'

services:
  app:
    image: myapp:latest
    environment:
      - APP_ENV=development
      - DEBUG=true

9.3 デバッグコマンド例

デバッグに使うコマンド例

例 1: データベース接続エラーの確認と修正

webサービスのログを表示:

Terminal

docker compose logs web

webdb間のネットワーク接続の確認:

Terminal

docker compose exec web ping db
docker compose exec web curl http://db:5432

webコンテナに接続して診断:

Terminal

docker compose exec web /bin/bash

例 2: ボリュームの問題の確認

ボリュームのマウント状況を確認:

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data
    
volumes:
  db-data:

dbコンテナに接続してデータを確認:

Terminal

docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
1
Опрос
サービスのスケール,  16 уровень,  3 лекция
недоступен
サービスのスケール
サービスのスケール
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION