Docker Machine:设备上没有剩余空间


126

我正在尝试使用Docker Compose设置Docker Machine。

场景1(没有Docker Machine)
如果我在docker-compose up -d没有Docker Machine的情况下运行,它会按意图创建3个链接的容器(nginx + mongodb + nodejs)。

场景2(使用Docker Machine)
然后,我使用Docker Machine创建VM,并告诉Docker与进行对话eval $(docker-machine env streambacker-dev)

在这一点上,如果我在docker机器上SSH并运行df -h,则会得到:

docker机器df -h

如果随后运行docker-compose up -d,则在下载最后一个容器时收到“设备上没有剩余空间”错误

之后,“ tmpfs”似乎确实有点满了:

docker机器df -h

检查--virtualbox-disk-size选项显示它的默认值为20000 MB,我认为这是我们在两张图片上都可以看到的“ / dev / sda1”。那么,为什么容器会填充“ tmpfs” n,而“ tmpfs”到底是什么呢?是一个临时下载目录吗?如何为容器创建更多空间?

谢谢!

有关信息,我正在使用Docker Machine 0.4.0-rc2Docker Compose 1.3.2


4
tmpfs无关--virtualbox-disk-size。它是安装在内存中的文件系统(例如RAM磁盘),没有任何东西可以访问您的磁盘。
2015年

感谢@ h3nrik提供该信息。
Marc Perrin-Pelletier

2
检查Docker的悬空内容,例如悬空图像,悬空卷并删除它们。docker rmi $(docker images -f dangling=true -q)docker volume rm $(docker volume ls -f dangling=true -q)
Jinna Balu

Answers:


87

就像上面说的,与tmpfs无关--virtualbox-disk-size。似乎boot2docker已装入tmpfs内存,因此您需要为virtualbox vm分配更多的内存。您可以通过指定--virtualbox-memory参数来实现。

   --virtualbox-memory "1024"
Size of memory for host in MB [$VIRTUALBOX_MEMORY_SIZE]

默认值:

$ docker-machine create --driver virtualbox testA
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
$ docker-machine ssh testA
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker@testA:~$ df -h /
Filesystem                Size      Used Available Use% Mounted on
tmpfs                   896.6M    112.7M    783.9M  13% /

随着--virtualbox-memory设置为8096

$ docker-machine create --driver virtualbox --virtualbox-memory 8096 testB
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
$ docker-machine ssh testB
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker@testB:~$ df -h /
Filesystem                Size      Used Available Use% Mounted on
tmpfs                     6.9G    112.4M      6.8G   2% /

14
不是很直观,但是可以。到底是什么,Docker?
2015年

1
确实不直观!但是,这似乎是问题所在,并为我解决了。因此,+ 1。
Ray Pendergraph 2015年

我也解决了这个问题,但是我不知道如何解决,谢谢!
Bendihossan

有什么方法可以增加默认大小,而不必每次都手动指定它?
CGFoX

124

我遇到了相同的错误([ERROR] InnoDB: Error number 28 means 'No space left on device'),并通过以下方式解决了该问题:

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}


3
在Mac上,我必须在参数值周围使用单引号(')docker rmi $(docker images | grep '^<none>' | awk '{print $3}')。删除已停止的容器的方法如下docker rm $(docker ps -qa --no-trunc --filter "status=exited")stackoverflow.com/a/32723127/619659
Webdevotion

1
我有很多未使用的图像,我达到了外壳的字符限制。这就是我这样做的原因docker images | grep "^<none>" | xargs docker rmi
马提亚斯·布劳恩

1
删除不需要的图像对我有所帮助。
akauppi,2016年

docker volume prune
justin.m.chase

..请参阅我的逐步说明以在另一个线程中使用resize2fs调整/ var / lib / docker的大小:stackoverflow.com/questions/32485723/…–
Alex

65

如果您使用的是Docker Community Edition:

 docker system prune
 docker volume prune  # as suggested by @justin-m-chase since system prune does not clean volumes.

如果您使用的是boot2docker(docker-machine),请清除孤立的卷:

 docker volume rm $(docker volume ls -qf dangling=true)

清除未使用的图像:

 docker rmi $(docker images -q -f "dangling=true")

6
docker system prune帮助了我
Maxim Yefremov,

2
docker system pruneftw
Michael Guild

1
docker volume prune对于仅卷,系统修剪将不会清除悬空的卷。
justin.m.chase

如果以上步骤无法为您留出足够的空间,请使用以下核选项:docker rmi $(docker images -q)--force如果您必须跳过多个容器中包含的一堆图层,则必须添加。
EmptyArsenal

14

A.删除未使用的图像

使用docker rm或docker rmi命令,您可以删除不需要的图像。实际上存在一个有助于完成此任务的映像(马丁/ docker-cleanup-volumes)。基础是从图像和容器列表中开始选择:

码头工人ps -a -s

B.修改DOCKER JSON描述符

在某些论坛中提到过。这个想法是增加〜/ .docker / machine / machines / machines / default / config.json中的描述符。该参数似乎是DiskSize,但我不知道它是否可以在其他OS(不在Windows中)中工作。

C.LINUX大小:

在Windows操作系统中,docker计算机或boot2docker实际上是virtualbox虚拟机,则可以按照以下步骤调整磁盘大小。注意备份文件。一般过程是在virtualbox中进行调整大小,然后使用称为gpartd的实用工具修改linux在其分区中感知的空间。下面提供了一些链接来执行此过程:

D.重新放入DOCKER-MACHINE / BOOT2DOCKER

想法是重新创建默认的docker-machine。以下命令可以说明您。请注意,当您重新创建boot2docker时,将丢失先前下载的docker映像。

docker-machine rm默认

docker-machine create --driver virtualbox --virtualbox-disk-size“ 100100”默认

docker-machine env默认

然后您可以转到虚拟框并使用命令“ df -h”查看boot2docker空间


谢谢。我在Windows上工作。我通过重新创建docker-machine做到了。
KinoP '16

帮助D :(正在重新创建docker计算机)
StanislavL

谢谢您,重新创建对我有用的docker-machine(我在Windows上)
Lucha Laura Hardie

我感到非常爱!
eduyayo

2

在docker osx上,我可以按一个按钮[ Move Disk Image ],它成功移动了Docker.qcow2(大概包含容器/图像)

在此处输入图片说明 最初-当机器启动时-我仍然 在设备错误上没有剩余空间, 但此问题很快就解决了。


0

我遇到了这个问题,并且无法通过Mac的Docker UI添加额外的空间,我使用自制软件安装了docker,并在创建我的机器时运行了以下命令:

docker-machine create --driver virtualbox --virtualbox-memory "2048" --virtualbox-disk-size "40000" default

这为我以前使用的虚拟机增加了两倍的内存和磁盘大小空间,您可以根据需要在此处添加所需的设置大小

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.