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

26

我正在使用安装有原生Docker的Windows 10。

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

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

但在Windows 10中我该在哪里找到它?

8个回答

31

对于 Windows 10 + WSL 2 (Ubuntu 20.04),Docker 版本为 20.10.2,构建版本号为 2291f61

让我们设定 DOCKER_ARTIFACTS == \\wsl$\docker-desktop-data\version-pack-data\community\docker

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

DOCKER_ARTIFACTS\containers\[你的容器ID]\[你的容器ID]-json.log

这里是一个例子:

输入图像描述


11
这对我来说确实有效。提示:在我的文件资源管理器地址栏中,我键入\wsl$。 - benjdewantara
谢谢!我会在另一个SO帖子中引用你的答案。终于在几个小时后看到了你的回答。 - Robert Sinclair
更改了(由于新版本?),现在位于 DOCKER_ARTIFACTS == \wsl$\docker-desktop-data\data\docker - Ricardo Rivaldo

11

对于我来说,在 Windows 10 21H2 上使用 Docker Desktop 版本 4.9.1(81317),WSL 2 模式下,容器的文件夹位于

\\wsl$\docker-desktop-data\data\docker\containers

与其他内容略有不同。


10

首先检查这些日志是否在(如此处建议)中:

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

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

关于通过Hyper-v使用Docker Linux,请检查“如何删除Docker容器日志文件(Windows或Linux)”是否有帮助(来自Jon Gallant):

  1. 运行docker inspect以查找Docker日志文件位置
  2. 找到“Docker Root Dir”值,我的是/var/lib/docker

您的Docker日志文件路径应为/var/lib/docker,但如果不是,则在下面的命令中更改它。

find /var/lib/docker/containers/ -type f -name "*.log"

https://blog.jongallant.com/2017/11/delete-docker-container-log-files/000330.png

这张图片中的命令基于 "如何在Windows上SSH到Docker VM(MobyLinuxVM)"。

我们并不是直接SSH进入虚拟机,而是创建一个具有完全root访问权限的容器,然后从中访问文件系统。

  • 获取具有Docker Daemon访问权限的容器
  • 以完全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

在那里执行查找命令,您应该能够找到日志。

3
谢谢。确实,如果我切换到Windows容器模式,我可以在"C:\ProgramData\docker"找到日志。 但是我说错了,我正在使用带有Docker桌面版和Linux容器模式的Windows 10。我想知道如何访问Hyper-V / MobyVM中/var/lib/docker/containers/[container_ID][container_ID]-json.log中存在的日志。谢谢! - tvautrin
1
第五个链接真的很有帮助!谢谢! - Maria Pomazkina-Karpikova
我按照路径走了,但是日志不在那里,因此这个答案是不正确的。 另一个选项是Docker只是糟糕的软件,他们的文档没有提供关于这个主题的信息。 - Kaszanas
@VonC 如果将这些日志之一复制到Windows本地驱动器怎么样?我尝试了以下命令,但总是显示“没有此目录”的错误:docker cp my-container:/var/lib/docker/containers/48339f914c0b86b902a0037143353e6a958729b288068a524e88879c1ffdd045/48339f914c0b86b902a0037143353e6a958729b288068a524e88879c1ffdd045-json.log /tmp - user15059549
@VonC,对于这个问题有什么想法吗? - user15059549
显示剩余13条评论

8
对于 Windows 10 + Docker Desktop版本3.6.0,日志和数据(artifacts)的虚拟路径为\\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下。 如何获取containerID: 您可以在命令提示符中运行docker ps来查找容器 ID(截断)。 您还可以通过单击DockerDesktop旁边的CLI按钮找到它,id将在弹出的cmd窗口的标题中。 获得ID后,您可以在artifacts目录(上面的\\wsl$\docker-...)下导航到containers\[containerID]。 日志文件将具有.log扩展名,其名称将包含containerID。 请记住,这将是一种丰富的JSON格式,因此不易读取。 如何获取volumeID: 要查找容器的数据(例如kafka代理主题),必须找到存储数据的卷的ID。 为此,您需要单击DockerDesktop中的容器,然后单击INSPECT(右上角)。 然后可以向下滚动以找到Mounts配置条目。 每个挂载将具有一个volumeID(与containerID不同),并且该volumeID将是类似于/var/lib/docker/volumes/71f7a5992c58fdcf229c3848acb014712f34fab380bc7c712cf5a0a632fe9110/_data的路径的一部分。 这里的volumeID71f7a5992c58fdcf229c3848acb014712f34fab380bc7c712cf5a0a632fe9110。 然后,您可以获取volumeID并在artifacts目录(上面的\\wsl$\docker-...)下导航到volumes\[volumeID],其中数据将位于其中。

4

针对想要删除WSL 2上的所有Docker日志文件的Windows用户。

感谢@craftsmannadeem提供的docker容器路径是正确的。

\\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
...

1
如果您在Windows+WLS上使用docker-compose,那么在我的情况下,日志监控代理(也作为docker容器运行)无法找到日志文件,即使已将日志路径挂载为卷。
volumes:
   - /var/run/docker.sock:/var/run/docker.sock
   - /var/lib/docker:/var/lib/docker

日志监控代理程序无法在中找到日志

/var/lib/docker/containers/**/*.log

在我的情况下,问题是我在 wsl shell 中运行了 docker-compose up 命令来启动日志监控代理。当我从 Windows Powershell 或 cmd 运行它时,代理能够在挂载的路径中找到日志。

救命稻草啊!我正在使用一些服务来启动elasticsearch、kibana和filebeat,但就是看不到任何日志在Kibana中显示出来。最终的解决方案竟然是,在powershell中运行docker-compose而非WSL实例中运行。 - James

0

我找不到本地存储日志的位置。(很有可能它们不再是纯文本格式。不过,如果你只需要日志的输出,你可以运行这样一个命令:

docker logs --details [container-name] > container-name.log

这将获取容器的日志并将其写入当前目录中的日志文件。

注意: --details 会向日志添加其他信息,例如环境变量等,但不需要该命令即可正常工作。


0

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


4
我使用Windows,但是找不到路径C:\ProgramData\Docker\containers(没有containers文件夹)。 有任何想法吗? - user15059549
1
嗨,你拿到结果了吗?我也没有 containers 文件夹。 - Navi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接