我正在使用安装有原生Docker的Windows 10。
我正在寻找Docker保存容器日志的位置。
在Linux中,Docker容器的日志文件位于以下位置:
/var/lib/docker/containers/container-id/container-id-json.log
但在Windows 10中我该在哪里找到它?
我正在使用安装有原生Docker的Windows 10。
我正在寻找Docker保存容器日志的位置。
在Linux中,Docker容器的日志文件位于以下位置:
/var/lib/docker/containers/container-id/container-id-json.log
但在Windows 10中我该在哪里找到它?
对于我来说,在 Windows 10 21H2 上使用 Docker Desktop 版本 4.9.1(81317),WSL 2 模式下,容器的文件夹位于
\\wsl$\docker-desktop-data\data\docker\containers
与其他内容略有不同。
首先检查这些日志是否在(如此处建议)中:
C:\ProgramData\docker\containers\[container_ID]\[container_ID]-json.log
Docker的C:\ProgramData\docker
是docker info
报告的Root Dir
。
关于通过Hyper-v使用Docker Linux,请检查“如何删除Docker容器日志文件(Windows或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"
这张图片中的命令基于 "如何在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
docker cp my-container:/var/lib/docker/containers/48339f914c0b86b902a0037143353e6a958729b288068a524e88879c1ffdd045/48339f914c0b86b902a0037143353e6a958729b288068a524e88879c1ffdd045-json.log /tmp
- user15059549Windows 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
的路径的一部分。 这里的volumeID
为71f7a5992c58fdcf229c3848acb014712f34fab380bc7c712cf5a0a632fe9110
。
然后,您可以获取volumeID
并在artifacts目录(上面的\\wsl$\docker-...
)下导航到volumes\[volumeID]
,其中数据将位于其中。针对想要删除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
...
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker:/var/lib/docker
日志监控代理程序无法在中找到日志
/var/lib/docker/containers/**/*.log
我找不到本地存储日志的位置。(很有可能它们不再是纯文本格式。不过,如果你只需要日志的输出,你可以运行这样一个命令:
docker logs --details [container-name] > container-name.log
这将获取容器的日志并将其写入当前目录中的日志文件。
注意: --details
会向日志添加其他信息,例如环境变量等,但不需要该命令即可正常工作。
对于 Windows 系统,日志位于 C:\ProgramData\Docker\containers 或 %APPDATA%\Docker。 对于 Linux 系统,日志位于 /var/lib/docker/containers。