特定のコンテナのログを見るためにdocker logs [container-name]
を使います。
これらのログを消去するためのエレガントな方法はありますか?
から この質問 あなたが実行できるワンライナーがあります:
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
私はDockerのファイルを直接修正することは大好きではありません。 Dockerに自動的にログをローテーションさせることができます。デフォルトの JSONロギングドライバ を使用している場合、これはdockerdへの追加のフラグで行われます。
dockerd ... --log-opt max-size=10m --log-opt max-file=3
起動スクリプトを変更する代わりに、これを daemon.json ファイルの一部として設定することもできます。
{
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"}
}
このファイルを変更した後は、必ずsystemctl reload docker
を実行して設定を適用してください。この設定は、新しく作成されたコンテナのデフォルトになります。新しいログ制限を受け取るには、既存のコンテナーを削除して再作成する必要があります。
ログを定期的に消去するようにlogrotateを設定できます。
/etc/logrotate.d/docker-logs内のファイル例
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
size=50M
missingok
delaycompress
copytruncate
}
Sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
Dockerコマンドを使って直接これを行うことはできません。
ログのサイズを制限するか、スクリプトを使用してコンテナに関連するログを削除することができます。ここにスクリプトの例があります(下から読んでください):機能:ログ履歴をクリアする機能#1083
Docker-composeファイルリファレンスの loggingセクション を確認してください。ここでは、一部のロギングドライバのオプション(ログローテーションやログサイズ制限など)を指定できます。
2018ソリューションDocker4Mac
LOGPATH=$(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
docker run -it --rm --privileged --pid=Host Alpine:latest nsenter -t 1 -m -u -n -i -- truncate -s0 $LOGPATH
最初の行は、受け入れられた回答と同様に、ログファイルのパスを取得します。
2行目では、nsenter
を使用して、Docker4Macのすべてのdockerコンテナのホストとしてそのサーバーをxhyve
VMで実行できます。私たちが実行するコマンドは、Mac以外の回答からのおなじみのtruncate -s0 $LOGPATH
です。
docker-compose
を使用している場合、最初の行は次のようになります。
local LOGPATH=$(docker inspect --format='{{.LogPath}}' $(docker-compose ps -q <service>))
そして<service>
はあなたのdocker-compose.yml
ファイルからのサービス名です。
https://github.com/justincormack/nsenter1nsenter
トリックに感謝します。
root ユーザーとして、次のコマンドを実行してください。
> /var/lib/docker/containers/*/*-json.log
または
cat /dev/null > /var/lib/docker/containers/*/*-json.log
または
echo "" > /var/lib/docker/containers/*/*-json.log
Ubuntuサーバーでは、SudoでもCannot open ‘/var/lib/docker/containers/*/*-json.log’ for writing: No such file or directory
を取得します
しかし、ドッカーの検査と切り捨ての回答を組み合わせるとうまくいきました:
Sudo truncate -s 0 `docker inspect --format='{{.LogPath}}' <container>`
Windows上のDocker、そしておそらく他のものでも、tailオプションを使うことが可能です。
例えばdocker logs -f --tail 100 msftmodbus
このように、最後の100行だけが表示され、あなたは最初に1M行をスクロールする必要はありません…
(したがって、ログの削除はおそらく不要です)
MacユーザーのためのDocker、これが解決策です:
次の方法でログファイルのパスを見つけます。
$ docker inspect | grep log
Docker machineにSSHで接続します(名前がdefault
であると仮定します。そうでない場合は、docker-machine ls
を実行して確認します)。
$ docker-machine ssh default
Rootユーザーに変更します( reference ):
$ Sudo -i
ログファイルの内容を削除します。
$ echo "" > log_file_path_from_step1