【问题标题】:Windows 10 and Docker container logs / Docker Logging driverWindows 10 和 Docker 容器日志/Docker Logging 驱动程序
【发布时间】: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


    【解决方案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):

    1. 运行 docker inspect 以查找您的 Docker 日志文件位置
    2. 找到“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(没有容器文件夹)。有什么想法吗?
        • 你好,你有结果吗,我也没有容器文件夹。
        猜你喜欢
        • 2020-07-04
        • 1970-01-01
        • 1970-01-01
        • 2017-06-18
        • 2018-10-03
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 2016-06-17
        相关资源
        最近更新 更多