0

我知道 Docker 使用存储池为每个容器分配存储。使用 devicemapper 存储时,默认存储池大小为 100GB,每个容器的默认限制为 10G。该数据显示在Base Device Size和中的Data Space Total字段中docker info

但是,在我的场景docker info中不显示这些数据字段,可能是因为我的存储驱动程序是overlay2 如何提取此信息,还有其他方法吗?

的输出docker info

Containers: 9
  Running: 4
  Paused: 0
  Stopped: 5
Images: 28
Server version: 28
Storage driver: overlay2
  Backing filesystem: extfs
  Supports d_type: true
  Native Overlay diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
...

的输出docker version

Docker version 18.09.3, build 774a1fa
4

2 回答 2

3

我知道 Docker 使用存储池为每个容器分配存储。

没有。Devicemapper 使用存储池。大多数其他联合文件系统直接在父文件系统中的文件级别工作。因此,没有显示预分配块和限制的“基本设备大小”或类似指标。

您可以深入研究覆盖文件系统,以了解它们如何将父文件系统中的目录合并到您在容器内使用的新文件系统中。我在这里的介绍演示中有一个通过覆盖文件系统工作的示例:

https://sudo-bmitch.github.io/presentations/docker-intro/presentation.html#52

此降价文件中列出了用于运行该叠加演示的实际命令。

因此,使用诸如 overlay2 文件系统之类的容器的所有限制都继承自父文件系统。由于 docker 在 /var/lib/docker 下完成所有操作,因此您在该文件系统上的可用磁盘空间与您在容器内看到的限制相同。在我自己的实验室中,它被符号链接到 /home 下的目录,因此您将在主机和容器内看到以下内容:

$ ls -l /var/lib/docker
lrwxrwxrwx 1 root root 12 Nov 11  2019 /var/lib/docker -> /home/docker

$ df -h /var/lib/docker/.
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/bmitch--t490--vg-home  857G  355G  459G  44% /home

$ docker run -it --rm busybox df -h /
Filesystem                Size      Used Available Use% Mounted on
overlay                 856.5G    354.6G    458.3G  44% /
于 2020-08-10T13:52:45.743 回答
2

您提到的“存储池”和其他指标特定于 devicemapper 存储驱动程序。覆盖存储驱动使用普通文件和一些内核魔法;Docker 没有任何特定的空间分配,它可以使用挂载在/var/lib/docker.

于 2020-07-25T11:50:09.117 回答