我在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 17.06.1及更高版本中,无需修剪未使用的卷。 从Docker 17.06.1开始,下面的命令也会删除卷:

docker system prune --volumes

来自Docker文档:https://docs.docker.com/config/pruning/

docker system prune命令是一个删除映像、容器和网络的快捷方式。在Docker 17.06.0及更早版本中,卷也会被修剪。在Docker 17.06.1及更高版本中,你必须为Docker系统剪枝指定——volumes标志来剪枝卷。

如果你想修剪卷并保留图像和容器:

docker volume prune

其他回答

如果你使用Docker桌面,你可以通过Docker的首选项在高级设置中增加磁盘镜像大小。

以下是macOS的截图:

立即删除所有未使用的容器、卷、网络和映像(https://docs.docker.com/engine/reference/commandline/system_prune/):

docker system prune -a -f --volumes

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

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

增加/var/lib/docker或使用其他空间更大的位置也是消除此错误的好选择(参见如何更改docker镜像安装目录?)

检查/var上是否有空闲空间,因为Docker默认将图像文件存储在/var/lib/ Docker中。

首先使用docker ps -a列出所有容器(包括停止的容器),然后使用docker rm删除它们;然后使用docker images列出您存储的所有映像,并使用docker rmi删除它们。

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

现在您应该能够创建一个新的映像(或从Docker Hub中提取一个映像),并且您应该会看到在您使用-g选项指定的目录中创建了一堆文件。

如果你已经清理了未使用的容器,图片用

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守护进程。

如前所述,

docker system prune

有帮助,但在Docker 17.06.1及更高版本中,无需修剪未使用的卷。 从Docker 17.06.1开始,下面的命令也会删除卷:

docker system prune --volumes

来自Docker文档:https://docs.docker.com/config/pruning/

docker system prune命令是一个删除映像、容器和网络的快捷方式。在Docker 17.06.0及更早版本中,卷也会被修剪。在Docker 17.06.1及更高版本中,你必须为Docker系统剪枝指定——volumes标志来剪枝卷。

如果你想修剪卷并保留图像和容器:

docker volume prune