我按照以下方式在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的建议:
当我摆脱所有图像和容器时,它释放了一些空间并且图像构建运行时间更长,然后失败并出现相同的错误。所以问题是,这是指哪个空间以及如何配置它?
答案 0 :(得分:264)
我有同样的错误并以这种方式解决:
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}
答案 1 :(得分:202)
<强>更新强>
随着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
一次删除一个。
答案 2 :(得分:65)
检查/ 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选项指定的目录中创建了一堆文件。
答案 3 :(得分:28)
如果它只是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
。
答案 4 :(得分:14)
答案 5 :(得分:13)
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")
这将删除已退出和悬空的图像,这有望清除设备空间。
答案 6 :(得分:9)
docker rmi $(docker images -f "dangling=true" -q)
答案 7 :(得分:8)
如果您已经清理了未使用的容器,请使用
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 守护进程。
答案 8 :(得分:7)
你也可以使用:
docker system prune
或只是卷:
docker volume prune
答案 9 :(得分:6)
使用以下命令清理Docker:
docker images --no-trunc | grep '<none>' | awk '{ print $3 }' \
| xargs docker rmi
答案 10 :(得分:6)
一次删除所有未使用的容器,卷,网络和图像(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或使用更多空间的其他位置也是摆脱此错误的好方法(参见How to change the docker image installation directory?)
答案 11 :(得分:6)
1。删除容器:
$ docker rm $(docker ps -aq)
2。删除图像:
$ docker rmi $(docker images -q)
您可以执行以下步骤,而不是执行步骤1和2:
docker system prune
此命令将删除:
答案 12 :(得分:5)
您的cgroup已启用cpuset
控制器。该控制器在NUMA环境中非常有用,它允许精确指定允许您运行任务的CPU /内存库。
默认情况下,强制cpuset.mems
和cpuset.cpus
未设置,这意味着您的任务没有“剩余空间”,因此错误。
解决此问题的最简单方法是在根cgroup中将cgroup.clone_children
设置为1。在你的情况下,它应该是
echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children
它基本上会指示系统从其父cgroup自动初始化容器的cpuset.mems
和cpuset.cpus
。
答案 13 :(得分:3)
不仅运行docker prune
命令。它将删除所有docker网络,容器和映像。因此,您可能最终也会丢失重要数据。
该错误表明“设备上没有剩余空间”,因此我们只需要释放一些空间即可。
释放空间的最简单方法是删除悬空的图像。
当不使用旧创建的图像时,这些图像称为悬空图像,或者还有一些可以删除的缓存图像。
使用以下命令。 列出所有悬空图像的图像ID。
docker images -f "dangling=true" -q
按图像ID删除图像。
docker rmi IMAGE_ID
这样,您可以释放一些空间并再次开始使用docker进行黑客攻击:)
答案 14 :(得分:3)
如前所述,
docker system prune
有帮助,但在Docker 17.06.0及更早版本中,不修剪未使用的卷。 从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 system prune指定--volumes标志以修剪卷。
如果要修剪卷并保留图像和容器:
docker volume prune
答案 15 :(得分:3)
docker system prune
和docker system prune --volumes
释放了位的空间,这可以工作一段时间。但是最终,每次我执行任何操作时,我都会出错。
对我来说,实际上解决了根本问题的一件事是删除了Docker for Mac用于存储的Docker.raw
文件,然后重新启动。
您可以通过Preferences > [Disk tab] > Disk Image Location > Reveal In Finder
在MacOS Finder中,它始终显示为您分配的大小,通常非常大(默认为64GB),但是那不是它在磁盘上的实际大小。
要获取实际大小,请在终端中打开目录并运行
du -h Docker.raw
对我来说,它是 41GB !删除后,我重新启动了Mac的Docker,再次创建了它,并为 0GB (查找程序仍显示64GB-运行命令进行检查)。 然后错误消失了。
说实话,我不知道为什么docker system prune
和docker system prune --volumes
不能完全清除此文件的内容以及其中的其他内容。这可能是Docker for Mac中的错误,该错误使您不需要的内容缓存在该文件中。
无论如何,这是实际的问题。该文件仅分配了一定数量的磁盘空间,它最终用无法由Docker删除的内容填满了绝对限制,这时似乎唯一的继续方法是亲自手动删除它。 / p>
答案 16 :(得分:2)
在我的例子中,我运行了 docker system df
来找出哪个组件消耗了更多的空间,然后我执行了 docker system prune -a
来清理所有悬空的容器、图像等。最后,我运行了docker volume rm $(docker volume ls -qf dangling=true)
清理悬空卷。
以下是按顺序执行的命令。
docker system df
docker system prune -a
docker volume rm $(docker volume ls -qf dangling=true)
答案 17 :(得分:2)
我还在RHEL机器上遇到此问题。我在堆栈溢出和docker-hub社区的任何地方都找不到合适的解决方案。 如果即使在执行以下命令后仍遇到此问题:
docker system prune --all
最终有效的解决方案:
答案 18 :(得分:2)
就我而言,安装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
答案 19 :(得分:1)
可能是由于默认存储空间设置为40GB(默认路径为/ var / lib / docker)
您可以更改存储量以指向不同的路径
DOCKER_STORAGE_OPTIONS ='-存储驱动程序=覆盖--graph = CUSTOM_PATH'
如果您运行命令docker info(它将存储驱动程序显示为覆盖)
答案 20 :(得分:1)
我运行以下命令。
以后无需重建图像。
docker rm $(docker ps -qf 'status=exited')
docker rmi $(docker images -qf "dangling=true")
docker volume rm $(docker volume ls -qf dangling=true)
这些删除已存在/悬空的容器和悬空的卷。
答案 21 :(得分:1)
就我而言,我没有那么多映像/容器,但是构建缓存正在填满我的Docker磁盘。
运行可以看到问题所在
docker system df
输出:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 22 13 7.581GB 3.899GB (51%)
Containers 15 0 2.166GB 2.166GB (100%)
Local Volumes 4 4 550.2MB 0B (0%)
Build Cache 611 0 43.83GB 43.83GB!!!!!!!!!
下面的命令解决了这个问题
docker builder prune
答案 22 :(得分:1)
似乎有几种方法可以发生这种情况。我遇到的问题是docker磁盘映像已达到其最大大小(如果要查看OSX中的大小,则为Docker Whale-> Preferences-> Disk)。
我提高了限制,很高兴去。我敢肯定,清理未使用的图像也可以。
答案 23 :(得分:1)
如果您通过Docker Toolkit使用boot2docker映像,则问题源于boot2docker虚拟机空间不足。
当您执行"pdo" => PDO {#131
inTransaction: false
attributes: array:11 [
"CASE" => NATURAL
"ERRMODE" => EXCEPTION
"PERSISTENT" => false
"DRIVER_NAME" => "sqlsrv"
"SERVER_INFO" => array:3 [
"CurrentDatabase" => "{{ DATABASE NAME }}"
"SQLServerVersion" => "12.00.5207"
"SQLServerName" => "{{ SERVER NAME }}"
]
"ORACLE_NULLS" => NATURAL
"CLIENT_VERSION" => array:4 [
"DriverDllName" => "msodbcsql13.dll"
"DriverODBCVer" => "03.80"
"DriverVer" => "13.00.0811"
"ExtensionVer" => "4.1.7-preview+9506"
]
"SERVER_VERSION" => "12.00.5207"
"STATEMENT_CLASS" => array:1 [
0 => "PDOStatement"
]
"STRINGIFY_FETCHES" => false
"DEFAULT_FETCH_MODE" => BOTH
]
}
或添加新图片时,图片会被复制到可能已满的docker import
。
检查图像中可用空间的一种方法是ssh进入vm并运行/mnt/sda1
并检查/ mnt / sda1中的剩余空间
ssh命令是
df -h
一旦你确定它确实是一个空间问题,你可以根据这个问题的一些答案中的说明进行清理,或者你可以通过增加{的空间来选择调整boot2docker图像本身的大小。 {1}}
您可以按照此处的说明进行图像大小调整 https://gist.github.com/joost/a7cfa7b741d9d39c1307
答案 24 :(得分:0)
docker system prune
对我有用。我正在运行Mac OS。
答案 25 :(得分:0)
如果您正在使用pyCharm ..?然后
1。安装docker插件。 2.在调试区域的终端选项卡旁边,转到服务选项卡。 3.连接docker。 4.删除所有容器。 5.再次运行dockerfile。
这将解决存储问题。
答案 26 :(得分:0)
答案 27 :(得分:0)
关于 prune 语句的帖子太多了。由于此命令确实会清理 docker 文件,因此如果实际存储受到阻碍,它不会修复您的系统。对我来说,问题是服务器的存储空间已经满了。因此我有两个选择。
选项 1:清理现有空间
df -H
,还剩多少空间?du --block-size=M -a / | sort -n -r | head -n 20
检查什么占用了您系统上的这么多空间,它会显示 20 个最大的文件。选项 2:获得更多空间
答案 28 :(得分:-1)
$ docker rm $(docker ps -aq)
这对我有用
答案 29 :(得分:-2)
我刚遇到这个。我正在使用Ubuntu 20.04。什么有效?重新安装Docker:
|head -n 5|tail -n 1
我知道,有点粗糙。我尝试修剪Docker,但仍然无法正常工作。