我使用docker logs [container-name]来查看特定容器的日志。

有什么优雅的方法来清除这些日志吗?


当前回答

Docker为Mac用户,这里是解决方案:

查找日志文件路径: $ docker inspect | grep日志 SSH进入docker机器(假设名称是默认的,如果不是,运行docker-machine ls来查找): $ docker-machine SSH默认 更改为root用户(参考): $ sudo -i 删除日志文件内容: $ echo "" > log_file_path_from_step1 .

其他回答

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技巧。

你也可以在docker运行命令行上提供log-opts参数,如下所示:

docker run --log-opt max-size=10m --log-opt max-file=5 my-app:latest

或者是码头式的。Yml是这样的

my-app:
image: my-app:latest
logging:
    driver: "json-file"
    options:
        max-size: "10m"
        max-file: "5"

致谢:https://medium.com/@Quigley_Ja/ roting-docker -logs-keeping-your-overlay-folder-small-40cfa2155412 (James Quigley)

不确定这是否对您有帮助,但删除容器总是有帮助的。

所以,如果你使用docker-compose进行安装,你可以简单地使用docker-compose down && docker-compose up -d而不是docker-compose restart。通过适当的设置(确保对持久数据使用卷挂载),您不会以这种方式丢失任何数据。

当然,这比任务要求的要多。但是在各种情况下,其他答案都不起作用(如果使用远程docker服务器或在Windows机器上工作,访问底层文件系统是私有的,而且很困难)

作为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

我更喜欢这个(从上面的解决方案):

truncate -s 0 /var/lib/docker/containers/*/*-json.log

然而,我正在运行几个系统(Ubuntu 18。x Bionic为例),该路径不能正常工作。Docker是通过Snap安装的,所以到容器的路径更像:

truncate -s 0 /var/snap/docker/common/var-lib-docker/containers/*/*-json.log