GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Dockerはログファイルをどこに保存しますか?

ほとんどの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

Docker
  1. 古いログファイルをクリーンアップするコマンド?

  2. .swfファイルを再生する方法は?

  3. Linux Mint はデフォルトのデスクトップ壁紙のファイルをどこに保存していますか?

  1. ワインストアファイルはどこにありますか?

  2. Linuxログファイル

  3. MySQL Docker で監査ログのパスを変更する方法

  1. Dockerイメージサイズ-小さく保つ方法は?

  2. make install はファイルをどこに置きますか?

  3. centos の SSH ログイン ログ ファイルの場所