我使用docker logs [container-name]来查看特定容器的日志。
有什么优雅的方法来清除这些日志吗?
我使用docker logs [container-name]来查看特定容器的日志。
有什么优雅的方法来清除这些日志吗?
当前回答
在我的Ubuntu服务器上,即使是sudo,我也会得到无法打开' /var/lib/docker/containers/*/*-json.log '来写:没有这样的文件或目录
但是结合docker检查和截断答案是有效的:
sudo truncate -s 0 `docker inspect --format='{{.LogPath}}' <container>`
其他回答
感谢@BMitch的回答,我刚刚写了一个shell脚本来清理所有容器的日志:
#!/bin/bash
ids=$(docker ps -a --format='{{.ID}}')
for id in $ids
do
echo $(docker ps -a --format='{{.ID}} ### {{.Names}} ### {{.Image}}' | fgrep $id)
truncate -s 0 $(docker inspect --format='{{.LogPath}}' $id)
ls -llh $(docker inspect --format='{{.LogPath}}' $id)
done
要移除/清除docker容器日志,我们可以使用下面的命令
$(docker inspect container_id|grep "LogPath"|cut -d """ -f4) 或 $(docker inspect container_name|grep "LogPath"|cut -d """ -f4)
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技巧。
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个字符,因为*意味着“任何东西”。
在使用docker桌面的计算机上,我们使用: Truncate -s 0 //wsl.localhost/docker-desktop-data/data/docker/containers/*/*-json.log
对于linux发行版,你可以使用这个路径: 截断-s 0 /var/lib/docker/containers/*/*-json.log