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

一定要检查你是否有不健康的容器。他们的行为非常奇怪,难以预测。在我的例子中,因为这些,我得到了这个错误,即使有大量的磁盘空间。

Docker ps -a将列出所有的容器。如果他们中的任何一个是这样的:

CONTAINER ID   IMAGE          COMMAND   CREATED          STATUS                     PORTS           NAMES
4c01db0b339c   ubuntu:12.04   bash      17 seconds ago   Up 16 seconds (unhealthy)  3300-3310/tcp   webapp

您需要重新启动docker守护进程。

其他回答

我在GCP mashine上遇到了这个问题。没有一种修剪方法对我有效。/var/lib/docker仍然重约160gb。然后我停了下来 服务docker停止删除docker缓存文件夹。

Sudo rm -rf /var/lib/docker。重新启动docker服务后,这个删除的文件夹被重新创建为明确的docker系统文件夹。当然,我丢失了所有的docker数据,但释放了磁盘空间。

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

那么多关于修剪声明的帖子。因为这个命令确实会清理docker文件,如果实际存储空间被占用,它不会修复您的系统。对我来说,问题是服务器的存储空间太满了。因此,我有两个选择。

选项1:清理现有空间

运行别人说过的所有系统修剪命令。 df -H,剩下多少空间? 用du——block-size=M -a / | sort -n -r | head -n 20检查是什么占用了系统这么多的空间,这将显示20个最大的文件。 删除文件或将其移出系统。

选择2:获得更多空间

为硬盘驱动器增加更多空间,然后扩展。如果你像我一样只有一个HD,我必须挂载名为“gparted”的操作系统并扩展驱动器。

在我的例子中,我运行了docker系统df来找出哪个组件占用了更多的空间,然后我执行了docker系统prune -a来清理所有悬挂的容器、图像等。最后,我运行docker卷rm $(docker卷ls -qf悬挂=true)来清理悬挂卷。

下面是按顺序执行的命令。

docker system df
docker system prune -a
docker volume rm $(docker volume ls -qf dangling=true)

不要只运行docker prune命令。它将删除所有的docker网络、容器和映像。所以你可能最终也会丢失重要的数据。

错误显示“设备上没有剩余空间”,所以我们只需要释放一些空间。

腾出空间最简单的方法就是删除悬空的图像。

当旧创建的图像不被使用时,这些图像被称为悬空图像或有一些缓存图像,以及你可以删除。

使用下面的命令。 列出所有悬挂图像。

docker images -f "dangling=true" -q

按映像id删除映像。

docker rmi IMAGE_ID

这样你就可以腾出一些空间,重新开始使用docker了:)