【发布时间】:2019-10-24 08:39:31
【问题描述】:
我正在使用带有本机 docker 安装的 Windows 10。
我正在寻找 docker 保存容器日志的位置。
在 Linux 中,Docker 容器日志文件位于以下位置:
/var/lib/docker/containers/container-id/container-id-json.log
但是在 Windows 10 中哪里可以找到它?
【问题讨论】:
标签: docker windows-10
我正在使用带有本机 docker 安装的 Windows 10。
我正在寻找 docker 保存容器日志的位置。
在 Linux 中,Docker 容器日志文件位于以下位置:
/var/lib/docker/containers/container-id/container-id-json.log
但是在 Windows 10 中哪里可以找到它?
【问题讨论】:
标签: docker windows-10
【讨论】:
首先检查这些日志是否在(如suggested here):
C:\ProgramData\docker\containers\[container_ID]\[container_ID]-json.log
Docker C:\ProgramData\docker 是docker info 报告的Root Dir。
关于通过 Hyper-v 的 Docker Linux,检查“How to Delete Docker Container Log Files (Windows or Linux) ”是否有帮助(来自Jon Gallant):
- 运行 docker inspect 以查找您的 Docker 日志文件位置
- 找到“Docker Root Dir”值,我的是 /var/lib/docker
您的 docker 日志文件路径应该是
/var/lib/docker,但如果不是,请在下面的命令中更改它。
find /var/lib/docker/containers/ -type f -name "*.log"
您在此图中看到的命令基于“How to SSH into the Docker VM (MobyLinuxVM) on Windows”
从技术上讲,我们不会通过 SSH 进入 VM,我们将创建一个具有完全 root 访问权限的容器,然后从那里访问文件系统。
- 获取可以访问 Docker 守护进程的容器
- 以完全 root 访问权限运行容器
- 切换到主机文件系统
打开命令提示符并执行以下命令:
docker run --privileged -it -v /var/run/docker.sock:/var/run/docker.sock jongallant/ubuntu-docker-client
docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh
chroot /host
在那里执行 find 命令,你应该会找到日志。
【讨论】:
truncate -s 0 $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)(truncate来自Git For WindowsC:\path\to\Git\usr\bin)
Template parsing error: template: :1:2: executing "" at <.LogPath>: map has no entry for key "LogPath" truncate: missing file operand Try 'truncate --help' for more information.
对于Windows 10 + Docker Desktop version 3.6.0,日志和数据(工件)的虚拟路径是\\wsl$\docker-desktop-data\version-pack-data\community\docker(您可以在资源管理器导航栏中复制/粘贴)。
日志位于\\wsl$\docker-desktop-data\version-pack-data\community\docker\containers\[containerID]\[containerID]-json.logs
并且数据在\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\[volumeID]\_data下
如何获取容器ID:
您可以通过在命令提示符下运行docker ps 来找到container ID(截断)。您也可以通过单击 DockerDesktop 上容器名称旁边的 CLI 按钮找到它,id 将在将弹出的 cmd 窗口的标题中。
获得 id 后,您可以导航到 artifacts 目录下的 containers\[containerID](上面的 \\wsl$\docker-...)。日志文件将具有.log 扩展名,其名称中将包含containerID。请记住,这将是一种丰富的 json 格式,因此不易阅读。
如何获取volumeID:
要查找容器的数据(例如 kafka 代理主题),您需要找到存储数据的卷的 ID。为此,您需要单击 DockerDesktop 中的容器,然后单击 INSPECT(右上角)。然后您可以向下滚动以查找Mounts 配置条目。每个挂载都有一个volumeID(不同于containerID),并且该volumeID 将是类似于/var/lib/docker/volumes/71f7a5992c58fdcf229c3848acb014712f34fab380bc7c712cf5a0a632fe9110/_data 的路径的一部分。 volumeID 这里是71f7a5992c58fdcf229c3848acb014712f34fab380bc7c712cf5a0a632fe9110。
然后,您可以使用volumeID 并导航到工件目录下的volumes\[volumeID](上面的\\wsl$\docker-...),数据将位于该目录下。
【讨论】:
适用于想要删除 WSL 2 上所有 Docker 日志文件的 Windows 用户。
docker 容器的路径是正确的,感谢@craftsmannadeem
\\wsl$\docker-desktop-data\version-pack-data\community\docker\containers
这里是在 Windows 上执行的命令:
del /s \\wsl$\docker-desktop-data\version-pack-data\community\docker\containers\*-json.log
再见 Docker 日志:
File was deleted - \\wsl$\docker-desktop-data\version-pack-data\community\docker\containers\2012efd0ccfb8aed6291dd9a3b7b5aef507b6af4fce5b85e9306f45980db9531\2012efd0ccfb8aed6291dd9a3b7b5aef507b6af4fce5b85e9306f45980db9531-json.log
File was deleted - \\wsl$\docker-desktop-data\version-pack-data\community\docker\containers\9e627f1fe8f3c3ab85c64f85f93942d1f077e9a6e2896b51df782b0c0c3777d1\9e627f1fe8f3c3ab85c64f85f93942d1f077e9a6e2896b51df782b0c0c3777d1-json.log
File was deleted - \\wsl$\docker-desktop-data\version-pack-data\community\docker\containers\6ea8f3cb354c199bc719701f8f1e75c333f81cd2f03dca0c7a626cbcbf9ed5a0\6ea8f3cb354c199bc719701f8f1e75c333f81cd2f03dca0c7a626cbcbf9ed5a0-json.log
...
【讨论】:
对于窗口系统日志位于 C:\ProgramData\Docker\containers 或 %APPDATA%\Docker 对于 Linux 系统日志位于 /var/lib/docker/containers
【讨论】: