在Mac上清除原生Docker中的日志

Axe*_*eaz 7 macos logging docker

我想摆脱我的docker env上的巨大容器日志文件.

我在Mac上运行本机Docker时遇到问题.我没有使用docker-machine(virtualbox)的东西.我的docker版本是1.13.1.

当我做

docker inspect <container-name>
Run Code Online (Sandbox Code Playgroud)

我看到了

"LogPath": "/var/lib/docker/containers/<container-id>/<container-id>-json.log
Run Code Online (Sandbox Code Playgroud)

但是我的mac(主机)上甚至没有目录/ var/lib/docker.

我也看了看

~/Library/Containers/com.docker.docker/
Run Code Online (Sandbox Code Playgroud)

但没有在那里找到任何容器特定的记录.

我可以使用尾巴,但对我来说总是不那么方便.

所以问题是,如何在我的原生Docker Mac环境中清除容器的日志文件.

小智 17

这将删除macOS 中的所有 docker 日志。

echo "rm /var/lib/docker/containers/*/*.log" | nc -U -w 0 ~/Library/Containers/com.docker.docker/Data/debug-shell.sock
Run Code Online (Sandbox Code Playgroud)


小智 14

Docker守护程序在单独的VM中运行,因此为了清除日志,您应该执行以下步骤:


首先,您可以在VM中找到日志路径,其中包括:

docker inspect --format='{{.LogPath}}' NAME|ID
Run Code Online (Sandbox Code Playgroud)


您可以使用连接到VM screen

screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
Run Code Online (Sandbox Code Playgroud)


在这里,您只需使用输出重定向来清除日志

> /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log
Run Code Online (Sandbox Code Playgroud)


最后你可以点击Control+ 分离屏幕a d

  • 在我的例子中,虚拟机路径是`~/Library/Containers/com.docker.docker/Data/vms/0/tty` (2认同)

小智 10

我将以下内容添加到我的bash_profile中.它获取docker容器的logpath,打开一个到docker机器的屏幕并删除日志文件.

clearDockerLog(){
dockerLogFile=$(docker inspect $1 | grep -G '\"LogPath\": \"*\"' | sed -e 's/.*\"LogPath\": \"//g' | sed -e 's/\",//g')
rmCommand="rm $dockerLogFile"
screen -d -m -S dockerlogdelete ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
screen -S dockerlogdelete -p 0 -X stuff $"$rmCommand"
screen -S dockerlogdelete -p 0 -X stuff $'\n'
screen -S dockerlogdelete -X quit
}
Run Code Online (Sandbox Code Playgroud)

用法如下:

clearDockerLog <container_name>
Run Code Online (Sandbox Code Playgroud)


Raj*_*rma 8

这是唯一适用于macOS 10.14的解决方案

docker run -it --rm --privileged --pid=host NAME nsenter -t 1 -m -u -n -i -- sh -c 'truncate -s0 /var/lib/docker/containers/*/*-json.log'
Run Code Online (Sandbox Code Playgroud)

将 NAME 替换为您的容器名称

希望这可以帮助

  • 2022 年 8 月 - 这仍然适用于 macOS 10.15 (2认同)