はじめに
docker logsに出力される内容でgrepし、処理を変更するシェルスクリプトを書こうとしたとき、そのままではgrepされなかったので、調べたことをメモ。
docker logs | grep doesn't work · Issue #9508 · moby/moby
docker logs -f doesn't cut it with a busy log file. 🙂
docker logs をgrepする場合の注意 - 自分の仕事を憎むには人生は余りにも短い
docker logs をgrepしたりsedawkする場合、Logがエラー出力に吐かれることに注意しないとはまります。 こんな感じで、エラー出力を標準出力にマージしてからgrepするとよい。 docker logs 2>&1 | grep...
結論から言うと
ログエントリが標準エラー用であり、grepをかけるためのパイプ処理が標準出力で動作するため、だそうで。
実際の方法
以下のようにして実行してやればdocker logsに対してgrep処理を実行できる。
docker logs 2>&1 | grep hello
# OR
docker logs 2>/dev/null | grep hello
他にも以下のような方法もあるらしいのですが、ちょっと試してみた感じでは分からなかったので調べてみたい。
docker logs -f --tail 0 container
https://gomiba.co.in/blog/archives/1790
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9ZG9ja2VyJTIwbG9ncyUyMCVFMyU4MSVBNyVFOCVBMSVBOCVFNyVBNCVCQSVFMyU4MSU5NSVFMyU4MiU4QyVFMyU4MiU4QiVFMyU4MyVBRCVFMyU4MiVCMCVFMyU4MSVBRSVFNCVCRiU5RCVFNSVBRCU5OCVFNSVBMCVCNCVFNiU4OSU4MCVFMyU4MSVBOCVFMyU4MyVBRCVFMyU4MyVCQyVFMyU4MyU4NiVFMyU4MyVCQyVFMyU4MyU4OCVFNiU5NiVCOSVFNiVCMyU5NSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZGYwYTQyNTVkNzJkOWQyOTExZjRlZmEzZGE1MzNiZjg&mark-x=142&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTcxNiZ0eHQ9JTQwdGlseSUyMGluJTIwJUU1JUFGJThDJUU1JUEzJUFCJUU5JTgwJTlBJUUzJTgyJUFGJUUzJTgzJUE5JUUzJTgyJUE2JUUzJTgzJTg5JUUzJTgzJTg2JUUzJTgyJUFGJUUzJTgzJThFJUUzJTgzJUFEJUUzJTgyJUI4JUUzJTgzJUJDJUUzJTgyJUJBJUU2JUEwJUFBJUU1JUJDJThGJUU0JUJDJTlBJUU3JUE0JUJFJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzImdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1lM2E3MTdiMWQ0YWMyNzNmOGI5ZjBjNTNmZTM1OGIxYg&blend-x=142&blend-y=491&blend-mode=normal&s=729eb299a9d41512e56c34fece0dbd44)
docker logs で表示されるログの保存場所とローテート方法 - Qiita
docker でコンテナを起動したとき、コマンドとして指定したプロセスが標準出力・標準エラー出力に吐いたログは docker logs ${コンテナID} で閲覧できる。自分で docker のサ…
各containerのlogの格納場所は以下のコマンドを実行することで確認できる。
docker inspect <container id> | grep 'LogPath'
dockerのlogのグローバル設定
/etc/docker/daemon.json
に設定を行うことで、logサイズの制限と、ローテーション設定を行うことが出来る。
![](https://docs.docker.com/assets/images/thumbnail.webp)
JSON File logging driver
Learn how to use the json-file logging driver with Docker Engine
Option | Description | Example |
---|---|---|
max-size | rotateされる前のログの最大サイズ。正の整数と、単位(k、m、またはg)を表す修飾子を加えたもの。デフォルトは-1(無制限)。 | --log-opt max-size=10m |
max-file | 保存されるログファイルの最大数。ログをロールバックして余分なファイルが作成された場合は、最も古いファイルが削除される。 max-size も設定されている場合にのみ有効。正の整数デフォルトは1。 | --log-opt max-file=3 |
compress | rotateしたログの圧縮を切り替える。デフォルトはdisabled 。 | --log-opt compress=true |
--log-opt max-size=[0-9]+[kmg]
--log-opt max-file=[0-9]+
{
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"}
}