我无法再使用 docker 或有效地运行新镜像——它报告说我的磁盘使用率为 100%。在这里,您可以看到我正在启动 ubuntu 的原始副本,但它告诉我没有剩余磁盘空间:
$ docker run -t -i ubuntu /bin/bash
root@3838b70bd76e:/# df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 19G 18G 0 100% /
none 19G 18G 0 100% /
tmpfs 1005M 0 1005M 0% /dev
shm 64M 0 64M 0% /dev/shm
/dev/sda1 19G 18G 0 100% /etc/hosts
tmpfs 1005M 0 1005M 0% /proc/kcore
另外,我尝试启动一个 mysql 实例,它向我发送了错误消息,我认为这些错误消息与我没有可用磁盘有关。当我尝试运行 orchardup/mysql 时,我收到:
ERROR: 1030 Got error 28 from storage engine
这意味着它的存储空间已经用完了。
鉴于此,我应该如何解释上述 df -h 报告,以及如何确定是什么消耗了 100% 的磁盘空间?我正在运行 docker 1.3,在 OSX 10.9.4 上运行,使用 boot2docker。
谢谢。
编辑:作为一种解决方法,我运行了boot2docker delete
,然后运行了boot2docker init
,它似乎已经破坏了我的所有图像(幸运的是我可以用我的docker文件)。现在,当我启动一个新的 Ubuntu 映像时:
root@f53d637e3d33:/# df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 19G 373M 17G 3% /
none 19G 373M 17G 3% /
tmpfs 1005M 0 1005M 0% /dev
shm 64M 0 64M 0% /dev/shm
/dev/sda1 19G 373M 17G 3% /etc/hosts
tmpfs 1005M 0 1005M 0% /proc/kcore
好多了。但是,我仍然感到困惑,在 boot2docker 托管的所有镜像中一定存在某种共享的全局磁盘,而这些磁盘之前已经被填满了?
编辑 2:我刚刚下载了一堆图像,现在当我运行 ubuntu 图像并检查可用磁盘空间时看到的内容:
root@f53d637e3d33:/# df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 19G 2.7G 15G 16% /
none 19G 2.7G 15G 16% /
tmpfs 1005M 0 1005M 0% /dev
shm 64M 0 64M 0% /dev/shm
/dev/sda1 19G 2.7G 15G 16% /etc/hosts
tmpfs 1005M 0 1005M 0% /proc/kcore
消耗量从 3% 到 16%!显然,我的所有图像之间存在某种我不理解的共享磁盘……
答案1
在 Windows 主机上,boot2docker 通过使用虚拟盒创建虚拟机来工作。当您运行 boot2docker init 时,它会创建一个虚拟机,并默认为根磁盘分配 20G。这个虚拟机运行一个最小的 Linux 操作系统,进而运行实际的 docker 守护程序(docker 守护程序尚未在 Windows 上本地运行)。
连接到虚拟机的磁盘为 docker 镜像提供了存储。因此,您可以查看 boot2docker init 命令的其他选项以增加初始磁盘大小。这将增加虚拟机中可用的磁盘大小,但正如 Queasy 指出的那样,您需要向 docker 守护程序添加附加选项以增加镜像的可用存储空间。
当您在容器中运行“df -h”时,报告的总磁盘大小是使用“dm.basesize”选项分配给 docker 守护进程的磁盘空间的大小。
注意:boot2docker 现已弃用,取而代之的是 Docker Toolbox。您可能希望升级到该版本,在这种情况下,您将使用“docker-machine create”而不是“boot2docker init”。我已切换到 docker-toolbox,因此无法测试 boot2docker init 所需的命令选项
答案2
修改 /etc/sysconfig/docker-storage 中的 docker 配置并添加以下行:
DOCKER_STORAGE_OPTIONS= --storage-opt dm.basesize=30G
在继续此任务之前请记住备份你的docker,因为它会在初始化后删除你的数据。
答案3
考虑一下硬盘可能有问题。日立 (Drive Fitness Test)、希捷 (Seatools) 和西部数据 (Western Digital Data Lifeguard) 都提供免费诊断软件来帮助您确定这一点。
举个例子,一个坏的驱动器会如何影响磁盘空间,我备份了 1TB 的驱动器,它们向 Windows 报告说它们仍然有PB 级剩余需要传输的数据。
如果您的驱动器没有问题,请使用 du(磁盘使用情况)查看哪个文件夹最大du -h /usr/bin
,du -h /var
或者du -h /home/[username]/Downloads
帮助查明哪个文件夹最大。
编辑:我看到您正在使用 OS X:您需要使用上面提到的 HDD 工具作为其可启动选项,或者使用免费的 Windows PE 之类的工具,然后您可以启动并运行这些工具。
答案4
devicemapper 是 docker 的默认存储引擎。它默认尝试在 /var/lib/docker 中预分配 100Gb。但并非所有空间都真正被使用,您可以在选项中对其进行配置。Docker 文档