メモ
- ログ出力する様子を確認する
- json形式とsyslog出力を試す
- ホストはUbuntu 18.04
JSON形式のログ確認
まず事前準備でイメージを作成する
ターミナルA
# Ubuntuのイメージをダウンロード
# ログを確認するため、フォアグラウンドで `hoge` を出力し続けるイメージを作成する
% cat Dockerfile
FROM ubuntu
CMD while :; do echo hoge ; sleep 1; done
# イメージ作成
% docker build .
ログの場所は /var/lib/docker/containers
以下になるため、ここで事前に別ターミナルでログは何も無いことを確認する。
ターミナルB
% pwd
/var/lib/docker/containers
% ls
# 何も無い
コンテナ実行
ターミナルA
# 作成したイメージをコンテナとして実行する
# `hoge` が出力され続ける
% docker run [IMAGE ID]
hoge
hoge
hoge
....
ログ確認
ターミナルB
# 確認するとコンテナIDのフォルダが作成されている
% ls
35a6b3f7dd71728f472b8d080c0ead191e397277194f7904f0b728c29f97d629
% cd 35a6b3f7dd71728f472b8d080c0ead191e397277194f7904f0b728c29f97d629
# 中身を確認すると、いくつかファイルがあるが、コンテナID-json.log が対象のログファイル
% ls
35a6b3f7dd71728f472b8d080c0ead191e397277194f7904f0b728c29f97d629-json.log hosts
checkpoints mounts
config.v2.json resolv.conf
hostconfig.json resolv.conf.hash
hostname
# ログファイル中身確認。JSON形式で出力内容がログとして記録されている
% cat 35a6b3f7dd71728f472b8d080c0ead191e397277194f7904f0b728c29f97d629-json.log
{"log":"hoge\n","stream":"stdout","time":"2020-03-11T13:42:50.246660997Z"}
{"log":"hoge\n","stream":"stdout","time":"2020-03-11T13:42:51.247573417Z"}
{"log":"hoge\n","stream":"stdout","time":"2020-03-11T13:42:52.249046128Z"}
{"log":"hoge\n","stream":"stdout","time":"2020-03-11T13:42:53.249507157Z"}
....
syslog でのログ確認
一度上記の環境を削除し、綺麗にする
ターミナルA
% docker ps -aq | xargs docker rm; docker images -aq | xargs docker rmi -f
ちなみに、コンテナを削除すると、ログファイル類の削除も消える
ターミナルB
% /var/lib/docker/containers# ls
# なにもない
ターミナルA
% docker build .
# --log-driver で syslog を指定する
% docker run --log-driver=syslog [IMAGE ID]
hoge
hoge
...
ターミナルB
% tail -f /var/log/syslog
[hogeを含んだログが色々出力される]
参考
Dockert調査 ~ログ編~ - Qiita https://qiita.com/HommaHomma/items/f943fa3397bc3f386057