【问题标题】:Is there a way to see container disk usage on Docker for Windows?有没有办法在 Docker for Windows 上查看容器磁盘使用情况?
【发布时间】:2019-04-26 23:14:03
【问题描述】:

我很好奇,除了容器映像中的层之外,是否有办法查看正在运行的 Windows 容器使用了多少磁盘空间。基本上,容器自创建以来“增长”了多少。

在 Linux(或在 HyperV 中运行的 Linux 容器)中,这将是 docker ps -s,但是该命令未在 Windows 容器上实现。我也试过docker system df -v,但也没有实现。通过直接查看磁盘或其他东西上的某个东西,也许有一种 hacky 方式?

【问题讨论】:

    标签: windows docker


    【解决方案1】:

    我检查了运行非 HyperV(进程隔离)容器的 Windows 10 1809,我很确定它与 Windows Server 容器相同。

    数据似乎保存在:

    C:\ProgramData\Docker\windowsfilter\{ContainerId}
    

    docker inspect {Id}GraphDriver\Data\dir下有一个文件夹的直接引用。

    该文件夹包含文件sandbox.vhdx,它似乎是每个容器的“可写层”。

    我无法打开它并查看文件系统,但如果我在容器内写入一些数据,我可以强制文件增长:

      docker exec <Id> powershell get-childitem c:\ -recurse `> c:\windows\temp\test.txt
    

    当容器停止/重新启动时,该层仍然存在,当容器为rmed 时,该文件夹被删除。

    在研究过程中,我看到了一个 open PR in moby 来改进此文件夹的清理。

    【讨论】:

    • 哦,这看起来很有希望!等一下,Moby PR 是否需要有一张可爱动物的照片?这必须是一件事!
    • 我有点好奇为什么一个全新的容器开始时有一个大约 132 兆的可写层。这正常吗?也许 Docker 出于某种性能原因正在复制一些东西,或者 Windows 启动各种服务会触及一大堆文件?
    • 启动文件写入听起来有道理;开始一个空白nanoserver:1809 创建一个 13mb 的文件。
    • 是的,我正在尝试启用 IIS 的 Windows Server Core 映像,因此可能还有更多启动活动。不管怎样,这似乎就是答案。希望他们在某个时候修复ps -s 功能!
    • 是的,您现在可以通过 Docker Desktop 使用进程隔离;我在 1809 上运行实际的 DockerEE(技术上未获得 Docker 许可,但我确信可以进行开发/测试),感谢这个人:kauffmann.nl/2019/03/04/…
    【解决方案2】:

    我正在使用 docker for windows (docker desktop 2.0.0.3),docker ps -s 实际实现了。

    CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS               NAMES               SIZE
    81acb264aa0f        httpd               "httpd-foreground"   6 minutes ago       Up 6 minutes        80/tcp              httpd               2B (virtual 132MB)
    

    Docker for windows 在 MobyLinuxVM 上运行。您可以访问 VM 和 docker 目录:

    docker run --privileged -it -v /var/run/docker.sock:/var/run/docker.sock jongallant/ubuntu-docker-client
    root@8b58d2fbe186:/# docker run --net=host --ipc=host --uts=host --pid=host –it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh
    root@8b58d2fbe186:/# chroot /host
    

    现在您可以像在 linux 上一样访问 /var/lib/docker 中的 docker 文件夹并检查大小。

    【讨论】:

    • 糟糕,我想我必须更新我的问题了!这适用于 Windows 容器,而不是 Linux 容器。对不起!
    猜你喜欢
    • 1970-01-01
    • 2019-04-19
    • 2016-05-28
    • 2015-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多