我使用docker logs [container-name]来查看特定容器的日志。
有什么优雅的方法来清除这些日志吗?
我使用docker logs [container-name]来查看特定容器的日志。
有什么优雅的方法来清除这些日志吗?
当前回答
Linux / Ubuntu:
如果您有多个容器,而您只想删除一个日志,而不想删除其他日志。
(如果你有类似“权限被拒绝”的问题,请先sudo su。) 列出所有容器:docker ps -a 寻找您想要的容器并复制container ID。例子:E1X2A3M4P5L6。 容器文件夹和真实名称比E1X2A3M4P5L6长,但前12个字符是docker ps -a中产生的。 只删除日志: > /var/lib/docker/containers/E1X2A3M4P5L6*/E1X2A3M4P5L6*-json.log(替换E1X2A3M4P5L6为您的结果!!)
正如您所看到的,在/containers内部是容器,logs具有相同的名称,但在结尾使用-json.log。你只需要知道前12个字符,因为*意味着“任何东西”。
其他回答
Use:
truncate -s 0 /var/lib/docker/containers/**/*-json.log
你可能需要sudo
sudo sh -c "truncate -s 0 /var/lib/docker/containers/**/*-json.log"
参考Jeff S. Docker:如何正确地清除Docker容器的日志?
参考:在文件被使用时截断它(Linux)
你不能通过Docker命令直接做到这一点。
您可以限制日志的大小,或者使用脚本删除与容器相关的日志。你可以在这里找到脚本示例(从底部阅读):特性:清除日志历史#1083的能力
查看docker-compose文件引用的日志部分,您可以在其中为一些日志驱动程序指定选项(例如日志旋转和日志大小限制)。
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虚拟机中运行命令,xhyve虚拟机作为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技巧。
作为root用户,尝试执行以下命令:
> /var/lib/docker/containers/*/*-json.log
or
cat /dev/null > /var/lib/docker/containers/*/*-json.log
or
echo "" > /var/lib/docker/containers/*/*-json.log
这将删除所有容器的日志文件:
sudo find /var/lib/docker/containers/ -type f -name "*.log" -delete