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
首先,您可以在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
小智 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)
这是唯一适用于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 替换为您的容器名称
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
3803 次 |
| 最近记录: |