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\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 命令,你应该会找到日志。
【讨论】:
谢谢。事实上,如果我切换到 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 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
GitHub Actions 上 Windows 环境中的测试容器:“找不到有效的 Docker 环境。请查看日志并检查配置”