我在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

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

 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

如何增加内存?系统配置存储在哪里?

以下是卡尔的建议:

当我摆脱了所有的图像和容器,它确实释放了一些空间和图像构建运行更长的时间之前失败与相同的错误。问题是,这指的是哪个空间我怎么配置它?


当前回答

你还可以使用:

docker system prune

或者仅为卷:

docker volume prune

其他回答

如果您通过Docker Toolkit使用boot2docker映像,那么问题源于boot2docker虚拟机已耗尽空间。

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

检查映像中可用空间的一种方法是ssh进入虚拟机并运行df -h并检查/mnt/sda1中的剩余空间

ssh命令为 Docker-machine SSH默认

一旦您确定这确实是一个空间问题,您可以根据这个问题的一些答案中的说明进行清理,或者您可以选择通过增加/mnt/sda1上的空间来调整boot2docker映像本身的大小

您可以按照这里的说明来调整图像的大小 https://gist.github.com/joost/a7cfa7b741d9d39c1307

如果它只是Docker的测试安装(即不是生产),并且你不关心做核清洁,你可以:

清洁所有容器: 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的ec2实例中使用了这个方法,而不是在任何严肃的QA或生产路径中使用。伟大的事情是,如果你有你的Dockerfile(s),它很容易重建或docker拉。

你的cgroups已经启用了cpuset控制器。这个控制器在NUMA环境中非常有用,它允许精细地指定允许运行哪个CPU/内存库的任务。

默认情况下是强制的cpuset。Mems和cpuset。cpu没有设置,这意味着“没有空间留给”您的任务,因此出现错误。

解决这个问题最简单的方法是启用cgroup。将根组中的Clone_children改为1。对你来说,应该是

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

它基本上会指示系统自动初始化容器的cpuset。Mems和cpuset。来自父cgroup的cpu。

在我的例子中,发生这种情况是因为我超过了Docker映像大小的10Gb限制。这似乎已经有所缓解,有一种方法可以将限制增加到100Gb (https://github.com/moby/moby/issues/5151),但我不确定如何—对于我的用例,切换到映射卷是可以的,无论如何都有更好的性能。

Docker for Mac

所以docker系统剪接和docker系统剪接——其他答案中建议的卷每次都释放了一些空间,但最终每次我运行任何东西都得到错误。

真正解决根本问题的是删除Docker。Docker for Mac用于存储的原始文件,并重新启动它。

要找到这个文件,打开Docker for Mac,然后转到*

Preferences > Resources > Advanced > Disk Image Location

*这是2.2.0.5版本,但在旧版本上应该是类似的

在新版本的Docker for Mac**上,它会在UI中显示该文件在磁盘上的实际大小,以及它的最大分配大小。你可能会看到它是巨大的。例如,在我的机器上,它是41GB!

**在旧版本上,它不会在UI中显示实际的磁盘使用情况,MacOS Finder总是显示文件大小为最大分配大小。您可以通过打开终端中的目录并运行du -h Docker.raw来检查磁盘上的实际大小

我删除了Docker。raw,重启Docker for Mac,文件自动重新创建,恢复为0GB。

一切都像以前一样继续工作,当然,我失去了Docker缓存。正如预期的那样,在运行了几个Docker命令后,文件又开始被几GB的东西填满,但远不到41GB。


更新

几个月后,我的Docker。Raw再次填充到类似的大小。所以这个方法确实有效,但必须每隔几个月重复一次。对我来说这很好。

关于这个工作原理的说明-我不得不假设这是Mac的Docker中的一个错误。它看起来真的像Docker系统修剪/ Docker系统修剪-卷应该完全清除这个文件的内容,但它似乎文件积累了其他不能被这些命令删除的东西。不管怎样,手动删除它可以解决问题!