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

时间:2015-08-09 23:58:21

标签: docker docker-compose docker-machine

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

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

场景2(使用Docker Machine)
然后我使用Docker Machine创建一个VM,并告诉Docker使用eval $(docker-machine env streambacker-dev)与该机器通信。

此时,如果我ssh到我的docker机器并运行df -h,我得到:

docker machine df -h

如果我然后运行docker-compose up -d,我会在下载最后一个容器时获得"no space left on device" error

之后

“tmpfs”确实有点满了:

docker machine df -h

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

谢谢!

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

7 个答案:

答案 0 :(得分:103)

我有同样的错误([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}

答案 1 :(得分:81)

如上所述,tmpfs--virtualbox-disk-size无关。似乎boot2docker将tmpfs安装到内存中,因此您需要为虚拟机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% /

答案 2 :(得分:50)

如果您使用的是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")

答案 3 :(得分:13)

一个。删除未使用的图像

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

  

docker ps -a -s

B中。修改DOCKER JSON DESCRIPTOR

在一些论坛中提到过它。想法是增加位于〜/ .docker / machine / machines / default / config.json中的描述符。该参数似乎是DiskSize,但我不知道它是否适用于其他操作系统(不在Windows中)。

℃。 LINUX RESIZE:

在Windows操作系统中,docker machine或boot2docker实际上是一个虚拟机vm,然后您可以按照该过程调整磁盘大小。注意备份文件。 一般过程是在virtualbox中调整大小,然后使用名为gpartd的实用程序来修改linux在其分区中感知的空间。 下面引用了一些链接来执行此过程:

d。重新启动DOCKER-MACHINE / BOOT2DOCKER

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

  

docker-machine rm default

     

docker-machine create --driver virtualbox --virtualbox-disk-size&#34; 100100&#34;默认

     

docker-machine env default

然后您可以转到虚拟框并使用命令&#34; df -h&#34;

查看boot2docker空间

答案 4 :(得分:2)

在docker osx /我能够按下按钮 [移动磁盘映像] 它成功地移动了Docker.qcow2(可能包含容器/图像)

enter image description here 最初 - 当机器启动时 - 我仍然得到了 设备错误没有剩余空间 但它很快就解决了。

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

运行docker system df来查看docker上正在占用的空间

然后运行:

docker system prune --all --force

删除所有隐藏的和未使用的容器。

docker system prune不会删除所有未使用的容器。