Docker机器:设备上没有剩余空间
我正在尝试使用Docker Compose来设置Docker机器。
场景1(不包括Docker机器)
如果我在没有Docker Machine的情况下运行docker-compose up -d
,它将创build3个链接的容器(nginx + mongodb + nodejs)。
scheme2(使用Docker机器)
然后,我使用Docker Machine创build一个VM,并告诉Docker与eval $(docker-machine env streambacker-dev)
。
在这一点上,如果我SSH我的docker机,并运行df -h
,我得到:
如果我然后运行docker-compose up -d
,则在下载最后一个容器时出现“设备上没有剩余空间”错误 。
“tmpfs”似乎确实有点充分之后:
检查–virtualbox-disk-size选项显示它默认为20000 MB,我认为这是我们在两张图片上可以看到的“/ dev / sda1”。 那么,为什么容器填满了“tmpfs”?什么是“tmpfs”呢? 是一个临时的下载目录吗? 我怎样才能为我的容器创造更多空间?
谢谢!
有关信息,我使用的是Docker Machine 0.4.0-rc2和Docker Compose 1.3.2 。
如上所述, tmpfs
与 – --virtualbox-disk-size
无关。 看起来boot2docker将tmpfs
挂载到内存中,所以你需要将更多的内存分配给你的virtualbox虚拟机。 你可以通过指定--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% /
我有同样的错误( [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>
图像(这些图像有时是在build立图像时生成的,如果由于某种原因造成图像被打断,则会停留在那里)。
这是一个很好的脚本,我用它来删除它们
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
然后,如果您使用Docker Compose为每个项目本地构build图像。 你最终会得到很多像你的文件夹一样命名的图像(例如,如果你的项目文件夹名为Hello,你会发现图像名称为Hello_blablabla
)。 所以也考虑删除所有这些图像
您可以编辑上述脚本以将其删除或手动删除它们
docker rmi {image-name}
如果您使用的是Docker Community Edition:
docker系统修剪
如果您正在使用boot2docker(docker-machine)清除孤立的卷:
docker volume rm $(docker volume ls -qf dangling = true)
清除未使用的图像:
docker rmi $(docker images -q -f“dangling = true”)
A.删除未使用的图像
使用docker rm或docker rmi命令,您可以删除不需要的图像。 实际上存在一个有助于完成这个任务的图像(martin / docker-cleanup-volumes)。 基础是开始从您的图像和容器列表中select:
docker工人ps -a -s
B.修改DOCKER JSON描述符
这是在一些论坛中提到的。 这个想法是增加位于〜/ .docker / machine / machines / default / config.json中的描述符。 该参数似乎是DiskSize,但我不知道它是否在其他操作系统(不在Windows中)工作。
C. LINUXresize:
在Windows操作系统中,docker机器或boot2docker实际上是一个virtualbox虚拟机,那么您可以按照过程来调整磁盘大小。 注意备份文件。 一般程序是在virtualbox中resize,然后使用名为gpartd的实用程序来修改linux在其分区中感知的空间。 有一些链接来做这个程序引用如下:
- 调整vbox磁盘的大小
- 移动空间
- vbox论坛
D.重新启动DOCKER-MACHINE / BOOT2DOCKER
这个想法是重新创build默认docker机。 以下命令可以说明你。 请注意,当您重新创buildboot2docker时,您将丢失以前下载的泊坞窗图像。
docker机rm默认
docker-machine create –driver virtualbox –virtualbox-disk-size“100100”default
docker-machine env默认
那么你可以去虚拟盒子,用命令“df -h”看boot2docker空间
在dockerOSX /我能够按下[ 移动磁盘映像 ],它成功地移动了Docker.qcow2(大概包含容器/图像)
最初 – 机器启动时 – 我仍然得到一个没有空间留在设备上的错误,但很快就解决了。