我使用docker logs [container-name]
查看特定容器的日志。
是否有一种优雅的方式来清除这些日志?
来自this question,你可以运行一个单行程:
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
我不是直接修改Docker文件的忠实粉丝。您可以让Docker自动为您旋转日志。如果您使用默认的JSON logging driver,则可以使用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
以应用设置。然后,此设置将成为任何新创建的容器的默认设置。需要删除并重新创建现有容器以接收新的日志限制。
在我的Ubuntu服务器上甚至作为sudo我会得到Cannot open ‘/var/lib/docker/containers/*/*-json.log’ for writing: No such file or directory
但梳理docker检查并截断答案是有效的:
sudo truncate -s 0 `docker inspect --format='{{.LogPath}}' <container>`
使用:
truncate -s 0 /var/lib/docker/containers/*/*-json.log
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
您可以设置logrotate以定期清除日志。
/etc/logrotate.d/docker-logs中的示例文件
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
size=50M
missingok
delaycompress
copytruncate
}
您不能通过Docker命令直接执行此操作。
您可以限制日志的大小,也可以使用脚本删除与容器相关的日志。你可以在这里找到脚本示例(从下面阅读):Feature: Ability to clear log history #1083
查看docker-compose文件引用的logging section,您可以在其中为某些日志记录驱动程序指定选项(例如日志轮换和日志大小限制)。
Docker4Mac,2018解决方案:
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
第一行获取日志文件路径,类似于接受的答案。
第二行使用nsenter
,它允许您在xhyve
VM中运行命令,该命令用作Docker4Mac下所有docker容器的主机。我们运行的命令是来自非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/nsenter1为nsenter
技巧。
在Windows上的Docker上,也可能是其他人,可以使用tail选项..
例如docker logs -f --tail 100 msftmodbus
这样,只显示最后100行,并且您没有首先滚动1M行...
(因此,删除日志可能是不必要的)
作为root用户,尝试运行以下命令:
> /var/lib/docker/containers/*/*-json.log
要么
cat /dev/null > /var/lib/docker/containers/*/*-json.log
要么
echo "" > /var/lib/docker/containers/*/*-json.log
Docker for Mac用户,这是解决方案:
$ docker inspect | grep log
default
,如果没有,请运行docker-machine ls
查找):
$ docker-machine ssh default
$ sudo -i
$ echo "" > log_file_path_from_step1