ほとんどのLinuxプログラムのデバッグには通常、ログファイルのチェックが含まれますが、これは複雑なプロセスになる可能性があります。ただし、Dockerでコンテナ化された環境で実行する場合は、より具体的なツールを使用して本番環境でアプリをデバッグする必要があります。
ログはどこに保存されますか?
簡単な答えは、Dockerがコンテナログをメインの保存場所である/var/lib/docker/
に保存することです。 。各コンテナには、ID(通常表示される短縮IDではなく完全なID)に固有のログがあり、次のようにアクセスできます。
/var/lib/docker/containers/ID/ID-json.log
ここが 保存されますが、JSON形式であるため、簡単に読み取ることができず、完全なコンテナーIDを使用する必要があるのは面倒です。 Dockerには、それらを表示するための組み込みコマンドが用意されています:
docker logs -f e4bd48ef3103
ここで、-f
フラグはプロンプトを開いたままにし、ファイル内の新しいエントリを「フォロー」します。 --tail
もできます ファイル、または--timestamps
を使用します ログ時間を表示するには、または--until
を使用します および--since
時間に基づいてフィルタリングします。
Docker Composeを使用している場合は、そこからlogコマンドを使用して、すべてのログを簡単に表示できます。
docker-compose logs
ただし、これはSTDOUTとSTDERRであり、多くの場合に役立ちますが、Dockerファイルの「CMD」で指定されたエントリポイントのコンソール出力のみが表示されます。多くのアプリには専用のログシステムがあり、多くの場合、/var/log/nginx/access.log
などのファイルにログを記録します。 。このようなログへのアクセスは、ホスト側からDockerを介して引き続き可能です。
コンテナ内のアプリからのログの表示
コンテナによっては、これは必要ない場合があります。たとえば、デフォルトのNGINXコンテナは、ログチェックを容易にするためにDockerログをSTDOUTに送信するように設定されています。これは、/dev/stdout
からのシンボリックリンクを使用して行われます。 ログファイルに追加すると、コンテナに似たようなものを設定できます。
RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
ただし、コンテナ内の特定のファイルをチェックアウトする場合は、そうすることができます。 Dockerはexec -it
を提供します 実行中のDockerプロセス内で任意のコマンドを実行できるようにするコマンド。これを使用して、Dockerコンテナ内のログファイルを調整できます。
docker exec -it e4bd48ef3103 tail -f log.txt
これにより任意のコマンドを実行できるため、journalctl
を使用できます。 または、docker exec -it
で始まる限り、必要なその他のデバッグ戦略 。 /bin/bash
を実行することもできます 飛び乗って歩き回りたい場合。
ホストサービスでより適切に機能するより永続的なソリューションは、Dockerボリュームマウントを使用することです。 /var/log/nginx
のようなディレクトリをバインドできます ホストから見えるボリュームに。まず、新しいボリュームを作成します:
docker volume create nginx-logs
そして、--mount
を使用してコンテナを実行します :
docker run -d --name devtest --mount source=nginx-logs,target=/var/log/nginx nginx:latest
Docker Composeを使用している場合は、プロセスを自動化できます。
version: "3.0" services: web: image: nginx:latest ports: - "80:80" volumes: - nginx-logs:/var/log/nginx/ volumes: nginx-logs:
このようにして、ログファイルはホストマシン上のログ集約サービスから直接取り込むことができます。
Dockerデーモンログの表示
代わりに、特定のコンテナ化されたアプリではなく、サーバー上のDockerサービス全体に固有のログを表示する場合は、journalctl
を表示する必要があります。 ログ:
sudo journalctl -fu docker.service
これはほとんどのシステムに保存されている場所ですが、一部のシステムでは別の場所にあります:
- Amazon Linux:
/var/log/docker
- CentOS / RHEL:
/var/log/messages | grep docker
- macOS:
~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
- Windows:
AppDataRoamingDockerlogvmdockerd.log