Docker容器驱动器与主机上的可用硬盘空间不匹配

我已经将一个新的自定义图像加载到远程RedHat 7 docker主机实例中。 运行新容器时,容器不会尝试使用整个磁盘。 我得到以下是容器上的df -h的输出:

rootfs 9.8G 9.3G 0 100% / /dev/mapper/docker-253:0-67515990-5700c262a29a5bb39d9747532360bf6a346853b0ab1ca6e5e988d7c8191c2573 9.8G 9.3G 0 100% / tmpfs 1.9G 0 1.9G 0% /dev shm 64M 0 64M 0% /dev/shm /dev/mapper/vg_root-lv_root 49G 25G 25G 51% /etc/resolv.conf /dev/mapper/vg_root-lv_root 49G 25G 25G 51% /etc/hostname /dev/mapper/vg_root-lv_root 49G 25G 25G 51% /etc/hosts tmpfs 1.9G 0 1.9G 0% /proc/kcore tmpfs 1.9G 0 1.9G 0% /proc/timer_stats 

但主机系统有更多的空间:

 Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_root-lv_root 49G 25G 25G 51% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 8.5M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/vg_root-lv_home 9.8G 73M 9.7G 1% /home /dev/sda1 497M 96M 402M 20% /boot 

看起来好像docker工人将9.8G的/ home映射分配给容器的整个驱动器。 所以我想知道是否有我看到这个的原因?

问题

我能够解决这个问题。 这个问题与正在安装到容器的卷没有关系(即,它不是将容器安装在容器上的根卷)。 发生这个问题是因为docker在RedHat中使用device-mapper来pipe理它的容器的文件系统。 默认情况下,容器将以10G的空间开始。 通常,docker将使用AUFS来pipe理容器的文件系统。 大多数基于Debian的Linux版本都是这种情况,但是RedHat使用device-mapper。

解决scheme

幸运的是,设备映射程序的大小可以在docker中configuration。 首先,我必须停止我的服务,并删除所有的图像/容器。 (注意:这里没有回来,所以根据需要备份所有的图像)。

 sudo service stop docker && sudo rm -irf /var/lib/docker 

然后,用所需的大小参数手动启动docker实例:

 sudo docker -d --storage-opt dm.basesize=[DESIRED_SIZE] 

在我的情况下,我增加了我的容器大小到13G:

 sudo docker -d --storage-opt dm.basesize=13G 

然后docker仍在运行,拉/重新加载所需的图像,启动一个容器,现在大小应该符合所需的大小。

接下来,我设置我的docker系统服务文件启动与所需的容器大小。 这是必需的,以便docker服务将启动所需大小的容器。 我编辑了/ etc / sysconfig / docker文件中的OPTIONSvariables。 现在看起来像这样:

 OPTIONS='--selinux-enabled --storage-opt dm.basesize=13G' 

最后,重新启动docker服务:

 sudo service stop docker 

参考

[1] https://jpetazzo.github.io/2014/01/29/docker-device-mapper-resize/ – 这就是我发现RedHat使用device-mapper的方式,而device-mapper有10G的限制。

[2] https://docs.docker.com/reference/commandline/cli/ – 在Docker文档中find存储选项。