Docker错误:设备上没有剩余空间

我通过以下方式在Debian 7机器上安装了docker

echo deb http://get.docker.io/ubuntu docker main>

/etc/apt/sources.list.d/docker.list

sudo apt-get update curl -sSL https://get.docker.com/ubuntu/ | sudo sh

之后,当我第一次尝试创build一个图像失败,出现以下错误

time="2015-06-02T14:26:37-04:00" level=info msg="[8] System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1bdaec2630197fa4da1b19cc3db7e3d3883/cgroup.procs: no space left on device" 

这是docker信息

 Containers: 2 Images: 21 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 25 Dirperm1 Supported: true Execution Driver: native-0.2 Kernel Version: 3.16.0-0.bpo.4-amd64 Operating System: Debian GNU/Linux 7 (wheezy) CPUs: 2 Total Memory: 15.7 GiB WARNING: No memory limit support WARNING: No swap limit support 

我如何增加内存? 系统configuration存储在哪里?

从Kal的build议:

当我摆脱了所有的图像和容器,它释放了一些空间和图像构build跑了很长时间之前,相同的错误失败。 所以问题是,这是指哪个空间,如何configuration?

我有同样的错误,并以这种方式解决:

1。 删除Docker中的孤立卷,可以使用内置的docker volume命令。 内置命令还会删除/ var / lib / docker / volumes中不是卷的任何目录,因此请确保没有任何要保存的内容。

警告如果你有一些你想保留的数据,要非常小心

清理:

 $ docker volume rm $(docker volume ls -qf dangling=true) 

其他命令:

列表悬摆卷:

 $ docker volume ls -qf dangling=true 

列出所有卷:

 $ docker volume ls 

2。 另外考虑删除所有未使用的图像。

首先摆脱<none>图像(这些图像有时是在build立图像时生成的,如果由于某种原因造成图像被打断,则会停留在那里)。

这是一个很好的脚本,我用它来删除它们

 docker rmi $(docker images | grep '^<none>' | awk '{print $3}') 

然后,如果您使用Docker Compose为每个项目本地构build图像。 你最终会得到很多像你的文件夹一样命名的图像(例如,如果你的项目文件夹名为Hello,你会发现图像名称为Hello_blablabla )。 所以也考虑删除所有这些图像

您可以编辑上述脚本以将其删除或手动删除它们

docker rmi {image-name}

检查/ var上的可用空间,因为这是默认情况下(在/ var / lib / docker中)Docker存储图像文件的位置。

首先通过使用docker ps -a来清理所有容器(包括停止的容器)和docker rm来清除它们; 然后使用docker images列出所有您存储的图像和docker rmi删除它们。

接下来,在docker守护进程上用-g选项更改存储位置,或者编辑/etc/default/docker DOCKER_OPTS并将-g选项添加到DOCKER_OPTS-g指定“Docker运行时”的位置,它基本上是Docker在创build映像和运行容器时创build的所有东西。 select一个具有足够空间的位置,因为磁盘空间会随着时间而增长。 如果编辑/etc/default/docker ,则需要重新启动docker守护程序才能使更改生效。

现在你应该可以创build一个新的镜像(或者从Docker Hub中拖出一个镜像),你应该可以看到使用-g选项指定的目录中创build了一堆文件。

UPDATE
随着Docker变得更加发达,下面的命令已经变成了黑客。 目前的最佳做法是

 docker system prune 

这将删除:

 - all stopped containers - all volumes not used by at least one container - all networks not used by at least one container - all dangling images 

如下所示,这是核。


要清理系统,请先移除容器

 $ docker rm $(docker ps -aq) 

然后删除图像

 $ docker rmi $(docker images -q) 

这当然是核,将删除所有容器和所有图像。 您可以通过docker rmi #IMAGE_ID docker rm #CONTAINER_ID#docker rmi #IMAGE_ID一次删除它们。

如果这只是Docker的testing安装(即不是生产),而且您不关心进行核清理,您可以:

清理所有容器: docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm

清理所有图像: docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f

同样,我在开发Docker时使用了这个ec2实例,而不是任何严肃的QA或生产path。 最重要的是,如果你有你的Dockerfile,很容易重build或者docker pull

立即删除所有未使用的容器,卷,networking和图像( https://docs.docker.com/engine/reference/commandline/system_prune/#related-commands ):

 docker system prune -a -f 

如果还不够,可以先移除正在运行的容器:

 docker rm -f $(docker ps -a -q) docker system prune -a -f 

增加/ var / lib / docker或者使用更多空间的另一个位置也是摆脱这个错误的好select(请参阅如何更改docker镜像安装目录? )

您的cgroup已启用cpuset控制器。 此控制器在NUMA环境中非常有用,它允许精确指定允许哪些CPU /内存组运行。

默认情况下,不会设置必需的cpuset.memscpuset.cpus ,这意味着您的任务没有“剩余空间”,因此是错误。

解决这个问题的最简单的方法是在root cgroup中启用cgroup.clone_children为1。 在你的情况下,应该是

 echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children 

它将基本上指示系统自动从其父cgroup初始化容器的cpuset.memscpuset.cpus

你也可以使用:

 docker system prune 

或只是卷:

 docker volume prune 

干净的docker使用,

 docker images --no-trunc | grep '<none>' | awk '{ print $3 }' \ | xargs docker rm 

1)清洁悬挂的图像
docker rmi $(docker images -f“dangling = true”-q)
2)删除不需要的卷
2)删除未使用的图像
2)删除未使用的容器

如果通过Docker Toolkit使用boot2docker映像,则问题源于boot2docker虚拟机的空间不足。

当您执行docker import或添加新图像时,图像将被复制到可能已满的/mnt/sda1中。

一种检查图像中可用空间的方法是将ssh放入vm中,然后运行df -h并检查/ mnt / sda1中的剩余空间

ssh命令是docker-machine ssh default

一旦你确定它确实是一个空间问题,你可以按照这个问题的一些答案中的说明进行清理,或者你可以select调整boot2docker映像本身的大小,方法是增加/mnt/sda1上的空间

你可以按照这里的指示做图像的大小调整https://gist.github.com/joost/a7cfa7b741d9d39c1307