web-dev-qa-db-ja.com

コンテナからのログを含むログファイルはどこにありますか?

docker-composeを使用していくつかのコンテナーを実行しています。コマンドdocker-compose logsでアプリケーションログを表示できます。しかし、例えば生のログファイルにアクセスしてどこかに送信したいのですが?それはどこにありますか?私はそれが各コンテナ(コンテナ内?)ごとに別々のログだと思いますが、どこで見つけることができますか?

80
user606521

コンテナのログは次の場所にあります。

/var/lib/docker/containers/<container id>/<container id>-json.log

(jsonであるデフォルトのログ形式を使用する場合)

137
Michael

docker inspect 各コンテナでログの場所を確認できます:

docker inspect --format='{{.LogPath}}' $INSTANCE_ID

そして、ログがそれらの集合サイズを管理する場所を把握しようとした場合、またはロギング自体のパラメーターを調整しようとした場合、以下が関連することがわかります。

ログ用に予約されているスペースの量を固定する

これは、 ログ履歴をクリアする機能の要求(問題1083) )から取得されます。

Docker 1.8およびdocker-compose 1.4には、 docker compose log driver およびlog-opt max-sizeを使用してログサイズを制限する方法が既に存在します。

mycontainer:
  ...
  log_driver: "json-file"
  log_opt:
    # limit logs to 2MB (20 rotations of 100K each)
    max-size: "100k"
    max-file: "20"

バージョン '2'のdocker composeファイルでは、構文が少し変更されました。

version: '2'
...
mycontainer:
  ...
  logging:
    #limit logs to 200MB (4rotations of 50M each)
    driver: "json-file"
    options:
      max-size: "50m"
      max-file: "4"

(両方の構文で、数字は引用符で囲まれた文字列として表されることに注意してください)

docker-compose logsが終了しない可能性がある問題

  • 問題1866 :コンテナーが既に停止している場合、コマンドlogsは終了しません
74
VonC

各コンテナのログが占めるスペースを確認するには、次を使用します。

docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl

Sudoの前にlsが必要な場合があります)。

7

Lessでログファイルを直接表示するには、次を使用します。

docker inspect $1 | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$/\1/p" | xargs Sudo less

./viewLogs.sh CONTAINERNAMEとして実行

2
icyerasor

2018年8月22日の時点で、ログは次の場所にあります。

/data/docker/containers/<container id>/<container id>-json.log
1
lixzhang

Windowsでは、デフォルトの場所はC:\ProgramData\Docker\containers\<container-id>-json.logです。

0
pmohandas