我使用
读取了Docker容器日志输出-arch=compute_60
我通过调用docker logs -f <container_name>
将大量数据记录到我的node.js应用程序的日志中。我需要清理日志,因为它太长了,console.log()
命令首先在日志的现有行中运行,然后才能结束。如何清洁它再次缩短?我想看一个像:
docker logs
但它似乎不存在。
答案 0 :(得分:43)
首先,如果你只需要看到更少的输出,你可以让docker只显示更新的行:
docker logs --since 30s -f <container_name_or_id>
或者你可以设置一些限制行:
docker logs --tail 20 -f <container_name_or_id>
要删除Docker for Linux安装上的日志,可以对单个容器运行以下命令:
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
请注意,这需要root,我不建议这样做。如果在docker将日志写入同一文件的过程中使文件为空,则可能会损坏日志文件。相反,您应该配置docker来旋转日志。
最后,您可以将docker配置为使用以下/etc/docker/daemon.json
文件中的以下内容自动轮换日志:
{
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"}
}
这允许docker每个容器最多保留3个日志文件,每个文件限制为10兆(因此每个容器限制20到30兆的日志)。您需要运行systemctl reload docker
来应用这些更改。这些更改是任何新创建的容器的默认值,它们不适用于已创建的容器。您需要删除并重新创建任何现有容器才能应用这些设置。
答案 1 :(得分:9)
这不是理想的解决方案,但在Docker构建命令之前,这是一个很好的解决方法。
使用以下内容创建脚本文件docker-clean-logs.sh
:
#!/bin/bash
rm $(docker inspect $1 | grep -G '"LogPath": "*"' | sed -e 's/.*"LogPath": "//g' | sed -e 's/",//g');
授予执行权限:
chmod +x ./docker-clean-logs.sh
停止要清理的Docker容器:
docker stop <container_name>
然后运行上面的脚本:
./docker-clean-logs.sh <container_name>
最后再次运行你的容器:
docker start ...
此页面上显示的是用户sgarbesi:https://github.com/docker/compose/issues/1083
答案 2 :(得分:5)
我发现的最好的脚本是
df.material = replace_values(df.material, d)
它将清除所有日志,您无需停止容器。
贷方转到https://bytefreaks.net/applications/docker/horrible-solution-how-to-delete-all-docker-logs
答案 3 :(得分:2)
运行:
docker inspect {containerId}
复制 LogPath 值
truncate -s 0 {LogaPath}
答案 4 :(得分:1)
您可以按照本文中的说明使用logrotate
https://sandro-keil.de/blog/2015/03/11/logrotate-for-docker-container/
这需要在启动容器之前完成。
答案 5 :(得分:1)
为了在OSX上执行此操作,您需要访问运行Docker容器的虚拟机。
您可以使用walkerlee/nsenter图像在VM中运行命令,如下所示:
docker run --rm -it --privileged --pid=host walkerlee/nsenter -t 1 -m -u -i -n sh
将其与您接受的答案的简化版本相结合:
#!/bin/sh
docker run --rm -it --privileged --pid=host walkerlee/nsenter -t 1 -m -u -i -n \
cp /dev/null $(docker inspect -f '{{.LogPath}}' $1)
保存,chmod +x
,运行它。
据我所知,这并不需要停止容器。此外,它会清除日志文件(而不是删除它),以便在清理后立即执行docker logs
时避免错误。
答案 6 :(得分:0)
docker swarm服务的解决方案:
logging:
options:
max-size: "10m"
max-file: "10"
答案 7 :(得分:0)
如果要删除所有日志文件,不仅要删除特定容器的日志,还可以使用:
>$ docker system prune