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

标签 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 正在将/home 映射的 9.8 gigs 分配给容器的整个驱动器。所以我想知道我看到这个是否有原因?

最佳答案

问题

我能够解决这个问题。该问题与正在安装到容器的卷无关(即它没有将主卷安装为容器上的根卷)。出现此问题是因为 docker 使用 RedHat 中的设备映射器来管理其容器的文件系统。默认情况下,容器将从 10G 的空间开始。一般来说,docker会使用AUFS来管理容器的文件系统。大多数基于 Debian 的 Linux 版本都是这种情况,但 RedHat 改用设备映射器。

解决方案

幸运的是,设备映射器的大小可以在 docker 中配置。首先,我必须停止我的服务,并删除我所有的图像/容器。 (注意:此操作无法恢复,因此请根据需要备份所有图像)。

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 systemd 服务文件设置为以所需的容器大小启动。这是必需的,以便 docker 服务将以所需的大小启动容器。我在/etc/sysconfig/docker 文件中编辑了 OPTIONS 变量。现在看起来像这样:

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 使用设备映射器的方式,并且该设备映射器有 10G 的限制。

[2] https://docs.docker.com/reference/commandline/cli/ - 在 docker 文档中找到存储选项。

关于Docker 容器驱动器与主机上的可用硬盘驱动器空间不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30947716/

相关文章:

node.js - 无法从我的 Node.js 应用程序连接到 Cassandra Docker 容器

docker - Docker镜像构建失败,出现 “COPY failed: no source files were specified”

docker - 在 Jenkins 从节点上运行的 Jenkinsfile 中执行 docker build 命令的最简单方法是什么?

php - 如何制作用于RabbitMQ PHP任务消费的Docker容器

docker - 安装Kubernetes时绒布无法启动

docker - Docker 中的 CUDA 版本与 WSL2 后端不匹配

docker - 无法访问 Docker Swarm 中服务的 HTTP 端点

python - 在单个 docker 容器或连接到同一个数据库的两个容器中运行两个进程?

docker - 以编程方式查找docker容器ip/port

docker - Docker镜像标签不起作用