AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1011579
Accepted
Michael Altfield
Michael Altfield
Asked: 2020-04-10 02:58:27 +0800 CST2020-04-10 02:58:27 +0800 CST 2020-04-10 02:58:27 +0800 CST

为什么 docker 说我的容器磁盘未满(QubesOS)?

  • 772

为什么一个小的 docker 镜像上的新容器说它的磁盘已满 10G 而不是?

我在 QubesOS 的 Debian 10 AppVM 中运行它。在 Debian 10 中,我这样做:

sudo apt-get -y install docker.io
sudo docker pull node:13-buster-slim

在撰写本文时,这给了我 docker v18.09.1 默认使用“overlay2”存储驱动程序。

root@coviz:~# sudo docker --version
Docker version 18.09.1, build 4c52b90
root@coviz:~# docker info | grep Storage
Storage Driver: overlay2
root@coviz:~# 

我的 docker 主机现在只有这个 181M 的 docker 镜像,没有容器。docker 主机只使用了 20G 中的 0.5G。大量的自由空间。

root@coviz:~# sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@coviz:~# sudo docker image ls -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
node                13-buster-slim      e4217af9b7c7        9 days ago          181MB
root@coviz:~# sudo docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              1                   0                   180.7MB             180.7MB (100%)
Containers          0                   0                   0B                  0B
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B
root@coviz:~# 

我正在为我的项目创建一个 Dockerfile,因此我执行以下命令以从上述基本映像启动一个新容器并将我放入该临时容器的外壳中

root@coviz:~# docker run --rm -it --entrypoint /bin/bash e4217af9b7c7
root@97a318c599ab:/#

不久之后,我在测试安装依赖项的命令时遇到了问题apt-get。我认为问题在于 apt 需要将缓存数据存储到/var/lib/apt/lists/. 实际错误是at least one invalid signature was encountered,但实际上似乎是磁盘填充问题(apt 密钥验证失败,因为它无法将签名存储到磁盘)。运行 anapt-clean无济于事;它已经是空的了。这是一个基于新镜像的新容器。

在这个新容器中检查磁盘df立即显示只有 17M 的可用磁盘空间,但我只能用du. 同样,这是一个新容器,所以我非常怀疑这是一个文件卡在“删除”状态仍由进程打开的问题。

root@97a318c599ab:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay         9.6G  9.1G   17M 100% /
tmpfs            64M     0   64M   0% /dev
tmpfs           255M     0  255M   0% /sys/fs/cgroup
/dev/xvda3      9.6G  9.1G   17M 100% /etc/hosts
shm              64M     0   64M   0% /dev/shm
tmpfs           285M     0  285M   0% /proc/asound
tmpfs           285M     0  285M   0% /proc/acpi
tmpfs           285M     0  285M   0% /proc/scsi
tmpfs           285M     0  285M   0% /sys/firmware
root@97a318c599ab:/# du -sh /*
4.8M    /bin
4.0K    /boot
0   /dev
612K    /etc
20K /home
12M /lib
4.0K    /lib64
4.0K    /media
4.0K    /mnt
5.2M    /opt
du: cannot access '/proc/11/task/11/fd/4': No such file or directory
du: cannot access '/proc/11/task/11/fdinfo/4': No such file or directory
du: cannot access '/proc/11/fd/4': No such file or directory
du: cannot access '/proc/11/fdinfo/4': No such file or directory
0   /proc
136K    /root
8.0K    /run
4.1M    /sbin
4.0K    /srv
0   /sys
2.2M    /tmp
160M    /usr
5.9M    /var
root@97a318c599ab:/# 

此外,docker ps -s显示我的容器上的“可写层”的大小为空(0B):

root@coviz:~# docker ps -a -s
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES               SIZE
320af1498086        e4217af9b7c7        "docker-entrypoint.s…"   15 minutes ago      Up 15 minutes                           epic_leakey         0B (virtual 181MB)
root@coviz:~# 

那么为什么这个新的 docker 容器的磁盘(基于约 200M 的图像)已满?是什么占用了大约 9G 的未计算空间?

debian disk-space-utilization docker debian-buster
  • 1 1 个回答
  • 879 Views

1 个回答

  • Voted
  1. Best Answer
    Michael Altfield
    2020-04-10T04:48:38+08:002020-04-10T04:48:38+08:00

    这是 QubesOS 还为 AppVM 分层磁盘空间的方式的一个问题。

    这是 docker 主机(Debian 10 AppVM)上的磁盘空间。请注意,它有 20G 的可用磁盘空间,/rw/但挂载到的可用磁盘空间/与容器内报告的相同。

    user@coviz:~$ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/xvda3      9.6G  9.1G   17M 100% /
    none            9.6G  9.1G   17M 100% /usr/lib/modules
    devtmpfs        1.9G     0  1.9G   0% /dev
    tmpfs           1.0G     0  1.0G   0% /dev/shm
    tmpfs           777M   17M  760M   3% /run
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           776M     0  776M   0% /sys/fs/cgroup
    /dev/xvdb        20G  418M   20G   3% /rw
    tmpfs            32M   12K   32M   1% /run/user/1000
    user@coviz:~$ 
    

    解决方案是添加一个配置,将/rw/config/qubes-bind-dirs.d/docker dirs 绑定'/var/lib/docker到. 这不仅实际上使 docker 容器能够访问 Qubes 更大的“私有存储”,而且还使该存储在重新启动时保持不变。/etc/docker/rw/

    以上可以通过在您的 Debian 10 AppVM 上执行以下操作来实现:

    sudo mkdir -p /usr/lib/qubes-bind-dirs.d
    sudo cat << EOF > /usr/lib/qubes-bind-dirs.d/50_user.conf
    binds+=( '/var/lib/docker' )
    binds+=( '/etc/docker' )
    binds+=( '/root/.docker' )
    EOF
    

    在旧版本的 QubesOS (< r4.0) 上,qubes-bind-dirs.d位于/rw/config/ [1]中:

    sudo mkdir -p /rw/config/qubes-bind-dirs.d
    sudo cat << EOF > /rw/config/qubes-bind-dirs.d/50_user.conf
    binds+=( '/var/lib/docker' )
    binds+=( '/etc/docker' )
    binds+=( '/root/.docker' )
    EOF
    

    然后重新启动 AppVM。当它恢复时,它将是这样的:

    root@coviz:~# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/xvda3      9.6G  8.9G  217M  98% /
    none            9.6G  8.9G  217M  98% /usr/lib/modules
    devtmpfs        1.9G     0  1.9G   0% /dev
    tmpfs           1.0G     0  1.0G   0% /dev/shm
    tmpfs           777M   17M  760M   3% /run
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           776M     0  776M   0% /sys/fs/cgroup
    /dev/xvdb        20G  617M   20G   4% /rw
    tmpfs            32M   12K   32M   1% /run/user/1000
    root@coviz:~# docker run --rm -it --entrypoint /bin/bash e4217af9b7c7
    root@66766a23ca1b:/# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    overlay          20G  618M   20G   4% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs           246M     0  246M   0% /sys/fs/cgroup
    /dev/xvdb        20G  618M   20G   4% /etc/hosts
    shm              64M     0   64M   0% /dev/shm
    tmpfs           274M     0  274M   0% /proc/asound
    tmpfs           274M     0  274M   0% /proc/acpi
    tmpfs           274M     0  274M   0% /proc/scsi
    tmpfs           274M     0  274M   0% /sys/firmware
    root@66766a23ca1b:/# 
    
    • 2

相关问题

  • 关闭 FTP

  • 如何在同一台电脑上从 putty 连接 debian vmware

  • debian- 文件到包的映射

  • Debian Ubuntu 网络管理器错误 [关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve