当前位置: 首页>>技术教程>>正文


ubuntu – 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

之后,当我第一次尝试创建图像时,它失败并显示以下错误

 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"

这是码头工人信息

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

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

根据Kal的建议:

当我摆脱了所有的图像和容器时,它确实释放了一些空间,并且图像构建运行了更长的时间,然后因相同的错误而失败。所以问题是,这是指哪个空间以及如何配置它?

最佳回答

我有同样的错误,并通过以下方式解决:

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>图像(有时会在构建图像时生成这些图像,并且如果由于某种原因而中断了图像构建,它们会停留在该位置)。

这是一个我用来删除它们的漂亮脚本

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

然后,如果您正在使用Docker Compose在本地为每个项目构建映像。最后,您将得到许多通常以您的文件夹命名的图像(例如,如果您的项目文件夹名为Hello,您将找到名称为Hello_blablabla的图像)。所以也考虑删除所有这些图像

您可以编辑上面的脚本以将其删除,也可以使用

docker rmi {image-name}

次佳回答

更新随着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 rm #CONTAINER_ID#docker rmi #IMAGE_ID删除它们。

第三种回答

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

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

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

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

第四种回答

如前所述,

docker system prune

可以提供帮助,但使用Docker 17.06.1及更高版本时不会修剪未使用的卷。从Docker 17.06.1开始,以下命令也修剪卷:

docker system prune --volumes

从Docker文档中:https://docs.docker.com/config/pruning/

The docker system prune command is a shortcut that prunes images, containers, and networks. In Docker 17.06.0 and earlier, volumes are also pruned. In Docker 17.06.1 and higher, you must specify the –volumes flag for docker system prune to prune volumes.

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

docker volume prune

第五种回答

如果这只是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,则可以很容易地进行重建和/或docker pull

第六种回答

Docker留下了晃来晃去的图像,这可能会占用您的空间。要在Docker之后进行清理,请运行以下命令:

docker image prune [-af if you want to force remove all images]

或旧版Docker:

docker rm $(docker ps -q -f 'status=exited')
docker rmi $(docker images -q -f "dangling=true")

这将删除现有的和悬空的图像,从而有望清除设备空间。

第七种回答

  1. 清洁悬挂的图像docker rmi $(docker images -f "dangling=true" -q)

  2. 删除不需要的卷

  3. 删除未使用的图像

  4. 取出未使用的容器

第八种回答

一次删除所有未使用的容器,卷,网络和映像(https://docs.docker.com/engine/reference/commandline/system_prune/#related-commands):

docker system prune -a -f --volumes

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

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

增加/var /lib /docker或使用具有更多空间的其他位置也是摆脱此错误的不错选择(请参阅How to change the docker image installation directory?)

第九种回答

您还可以使用:

docker system prune

或仅用于数量:

docker volume prune

第十种回答

就我而言,安装ubuntu-server 18.04.1(出于某些奇怪的原因)创建了一个LVM逻辑卷,其大小仅为4GB,而不是750GB。因此,当我拉图像时,我会得到这个“设备上没有剩余空间”的错误。解决方法很简单:

lvextend -l 100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9335.html,未经允许,请勿转载。