2016-12-19 47 views
6

我正在运行Mac本地Docker(没有virtualbox/docker-machine)。如何修复Docker中'设备上没有剩余空间'错误?

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

当我跑我的形象,我得到这样一个错误:

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

在我的Mac主机的/ var正坐在60%的可用空间,一般我的硬盘有很多免费的存储空间。

这是一些Docker配置,我需要为它提供更多的资源吗?从mount

相关行内泊坞窗:

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 
+0

你看到了什么,如果你运行'mount'和'df'为根泊坞窗实例内部? (将其添加到问题中) - 也为我们提供运行容器的'docker inspect'输出的相关部分。 – slim

+0

好的,所以有趣的部分是'/ dev/vda1'挂载为'/ var/lib/postgresql/data'(以及'/ data' )。但是它和'/'有完全相同的空闲空间,所以可能与下面的音量相同,而且在你运行'df'的时候它还远没有满。我服从Docker的神。 “码头检查”可能会揭露更多。 – slim

+0

默认情况下,容器会获得10GB的空间,这可能是您正在运行的墙。目前我没有时间进一步查看,但我相信您可以增加它,并查看https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/ –

回答

1

我在Linux上泊坞窗的安装使用了devicemapper存储驱动程序(默认)就遇到了这个最近上。确实有一个码头配置需要改变以解决这个问题。

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

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

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

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

无论如何,为了使其生效,您需要删除所有现有图像(以便在新的基本快照上重新创建新图像)。见storage driver options

+0

请注意,这仅适用于devicemapper,而OSX不使用该方法:https://github.com/docker/for-mac/issues/2134 – pcambra

0

我还没有发现如此多的选择,在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/*

  • 你可以尝试修剪所有未使用的图像/箱,但实践证明这不是很有效:

docker system prune

参见:How do you get around the size limitation of Docker.qcow2 in the Docker for Mac?https://forums.docker.com/t/no-space-left-on-device-error/10894/26

相关问题