我该如何修复Docker中“设备上没有剩余空间”的错误?

我正在运行Mac本地Docker(没有virtualbox / docker-machine)。

我有一个巨大的形象,其中有很多的基础设施(Postgres等)。 我已经运行清理脚本来摆脱大量未使用的图像等等。

当我运行我的图像,我得到一个错误,如:

could not create directory "/var/lib/postgresql/data/pg_xlog": No space left on device 

在我的主机上,Mac / var占用了60%的空间,通常我的磁盘有大量的存储空间。

这是一些Docker的configuration,我需要碰一下,给它更多的资源?

docker内的相关线路:

 none on / type aufs (rw,relatime,si=5b19fc7476f7db86,dio,dirperm1) /dev/vda1 on /data type ext4 (rw,relatime,data=ordered) /dev/vda1 on /etc/resolv.conf type ext4 (rw,relatime,data=ordered) /dev/vda1 on /etc/hostname type ext4 (rw,relatime,data=ordered) /dev/vda1 on /etc/hosts type ext4 (rw,relatime,data=ordered) /dev/vda1 on /var/lib/postgresql/data type ext4 (rw,relatime,data=ordered) 

这里是df

 [11:14] Filesystem 1K-blocks Used Available Use% Mounted on none 202054928 4333016 187269304 3% / tmpfs 1022788 0 1022788 0% /dev tmpfs 1022788 0 1022788 0% /sys/fs/cgroup /dev/vda1 202054928 4333016 187269304 3% /data shm 65536 4 65532 1% /dev/shm tmpfs 204560 284 204276 1% /run/docker.sock 

我最近遇到了这个问题,在linux上使用devicemapper存储驱动程序(默认)进行docker安装。 确实有一个dockerconfiguration,我需要改变来解决这个问题。

Docker映像由只读的文件系统快照层构成,每个层都由Dockerfile的命令创build,这些命令构build在公共基本存储快照之上。 基础快照由所有图像共享,并具有默认大小为10GB的文件系统。 当你运行你的映像时,你会在映像的所有图层上获得一个新的可写层,这样你就可以在运行的容器中添加新的文件,但是最终仍然基于10GB文件系统的基本快照。 这对devicemapper至less是正确的,不知道其他驱动程序。 这里是docker的相关文档。

要将此默认值更改为其他值,可以设置一个守护进程参数,例如docker daemon --storage-opt dm.basesize=100G 。 由于您可能不需要手动运行守护进程,因此需要在某个文件中编辑docker守护进程选项,具体取决于您如何运行docker守护进程。 使用docker for mac,您可以在守护进程 – Daemon->Advanced下的首选项中将守护进程参数编辑为JSON。 你可能需要添加这样的东西:

 { "storage-opts": ["dm.basesize=100G"] } 

(但就像我说的,我有这个问题在Linux上,所以没有尝试以上)。

无论如何,为了使其生效,您需要删除所有现有的图像(以便在新的基础快照上重新创build新的图像)。 看存储驱动程序选项 。

我还没有find很多的select,github中的主要问题是https://github.com/docker/for-mac/issues/371

这里提出的一些选项是:

  • 如果您可以删除所有图像/容器,则可以按照以下说明进行操作:

docker rm $(docker ps -a -q) docker rmi $(docker images -q) docker volume rm $(docker volume ls |awk '{print $2}') rm -rf ~/Library/Containers/com.docker.docker/Data/*

  • 您可以尝试修剪所有未使用的图像/容器,但这已被certificate不是非常有效:

docker system prune

  • 使用更大的模板图像,使用自制软件安装qemu并移动图像,看到这个具体的评论: https : //github.com/docker/for-mac/issues/371#issuecomment-242047368但你需要在剩下的空间至less有2倍,而不会丢失容器/图像。

另请参阅: 如何解决Docker for Mac中Docker.qcow2的大小限制? 和https://forums.docker.com/t/no-space-left-on-device-error/10894/26