Windows 10 和 Docker 容器日志/Docker Logging 驱动程序

Posted

技术标签:

【中文标题】Windows 10 和 Docker 容器日志/Docker Logging 驱动程序【英文标题】:Windows 10 and Docker container logs / Docker Logging driver 【发布时间】:2019-10-24 08:39:31 【问题描述】:

我正在使用带有本机 docker 安装的 Windows 10。

我正在寻找 docker 保存容器日志的位置。 在 Linux 中,Docker 容器日志文件位于以下位置:

/var/lib/docker/containers/container-id/container-id-json.log

但是在 Windows 10 中哪里可以找到它?

【问题讨论】:

【参考方案1】:

对于Windows 10 + WSL 2 (Ubuntu 20.04), Docker version 20.10.2, build 2291f61

DOCKER_ARTIFACTS == \\wsl$\docker-desktop-data\version-pack-data\community\docker

容器日志可以在以下位置找到

DOCKER_ARTIFACTS\containers\[Your_container_ID]\[Your_container_ID]-json.log

这是一个例子:

【讨论】:

这实际上对我有用。提示:在我的文件资源管理器的地址栏上,我输入 \\wsl$【参考方案2】:

首先检查这些日志是否在(如suggested here):

C:\ProgramData\docker\containers\[container_ID]\[container_ID]-json.log

Docker C:\ProgramData\dockerdocker info 报告的Root Dir

关于通过 Hyper-v 的 Docker Linux,检查“How to Delete Docker Container Log Files (Windows or Linux) ”是否有帮助(来自Jon Gallant):

    运行 docker inspect 以查找您的 Docker 日志文件位置 找到“Doc​​ker 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 命令,你应该会找到日志。

【讨论】:

谢谢。事实上,如果我切换到 Windows 容器模式,我可以在“C:\ProgramData\docker”中找到日志。但我说错了,我使用的是带有 Docker Desktop 和 Linux 容器模式的 Windows 10。我想了解如何访问 Hyper-V / MobyVM 的 /var/lib/docker/containers/[container_ID][container_ID]-json.log 中的日志。谢谢! 第五个链接真的很有帮助!谢谢! 我遵循了路径,但日志不存在,因此此答案不正确。另一种选择是 Docker 只是一个糟糕的软件,他们的文档没有提供关于这个主题的信息。 @Kaszanas 你在使用 WSL2 吗?你能试试truncate -s 0 $(docker inspect --format='.LogPath' <container_name_or_id>)truncate来自Git For WindowsC:\path\to\Git\usr\bin @VonC 我没有使用 WSL2 来设置我分配给 Docker 的有限空间和资源,我发现在使用 WSL2 时,在 Docker 配置中是不可能的。 Git bash 运行时指定的命令返回: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.【参考方案3】:

对于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-...),数据将位于该目录下。

【讨论】:

【参考方案4】:

适用于想要删除 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
...

【讨论】:

【参考方案5】:

对于窗口系统日志位于 C:\ProgramData\Docker\containers 或 %APPDATA%\Docker 对于 Linux 系统日志位于 /var/lib/docker/containers

【讨论】:

我使用的是 Wİndows,但是没有这样的目录 C:\ProgramData\Docker\containers(没有容器文件夹)。有什么想法吗? 你好,你有结果吗,我也没有容器文件夹。

以上是关于Windows 10 和 Docker 容器日志/Docker Logging 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

docker容器日志存储多久

Filebeat 容器不向 Elastic 发送日志

docker一次查看两个容器日志

GitHub Actions 上 Windows 环境中的测试容器:“找不到有效的 Docker 环境。请查看日志并检查配置”

如何使用Windows Containers运行RabbitMQ linux Docker镜像?

win11docker怎么连接容器