docker-compose
を使用していくつかのコンテナーを実行しています。コマンドdocker-compose logs
でアプリケーションログを表示できます。しかし、例えば生のログファイルにアクセスしてどこかに送信したいのですが?それはどこにありますか?私はそれが各コンテナ(コンテナ内?)ごとに別々のログだと思いますが、どこで見つけることができますか?
コンテナのログは次の場所にあります。
/var/lib/docker/containers/<container id>/<container id>-json.log
(jsonであるデフォルトのログ形式を使用する場合)
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
が終了しない可能性がある問題
logs
は終了しません各コンテナのログが占めるスペースを確認するには、次を使用します。
docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl
(Sudo
の前にls
が必要な場合があります)。
Lessでログファイルを直接表示するには、次を使用します。
docker inspect $1 | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$/\1/p" | xargs Sudo less
./viewLogs.sh CONTAINERNAMEとして実行
2018年8月22日の時点で、ログは次の場所にあります。
/data/docker/containers/<container id>/<container id>-json.log
Windowsでは、デフォルトの場所はC:\ProgramData\Docker\containers\<container-id>-json.log
です。