Docker 机器:设备上没有 space

Docker Machine: No space left on device

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

场景 1(没有 Docker 机器)
如果我 运行 docker-compose up -d 没有 Docker 机器,它会按预期创建我的 3 个链接容器 (nginx+mongodb+nodejs).

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

与该机器通信

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

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

"tmpfs"之后好像确实有点饱了:

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

谢谢!

有关信息,我正在使用 Docker Machine 0.4.0-rc2Docker 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卷命令。内置命令还会删除 /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 }')

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

您可以编辑上面的脚本来删除它们,或者使用

手动删除它们

docker rmi {image-name}

一个。删除未使用的图像

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

docker ps -a -s

乙。修改 DOCKER JSON 描述符

它在一些论坛中被提及。这个想法是增加位于 ~/.docker/machine/machines/default/config.json 中的描述符。参数似乎是 DiskSize,但我不知道它是否适用于其他 OSs(不适用于 windows)。

C。 LINUX 调整大小:

in Windows OS, docker machine or boot2docker 实际上是一个virtualbox vm,那么你可以按照步骤调整磁盘大小。注意备份文件。 一般程序是在 virtualbox 中调整大小,然后使用名为 gpartd 的实用程序修改其分区中 linux 感知的 space。 下面引用了一些链接来执行此过程:

D.重新创建 DOCKER-MACHINE / BOOT2DOCKER

想法是重新创建默认的 docker-机器。下面的命令可以说明你。请注意,当您重新创建 boot2docker 时,您将丢失之前下载的 docker 个图像。

docker-machine rm default

docker-machine create --driver virtualbox --virtualbox-disk-size "100100" default

docker-machine env default

然后你可以进入虚拟框并使用命令“df -h”

查看boot2docker space

如果您使用的是 Docker 社区版:

 docker system prune --volumes  

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

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

清除未使用的图像:

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

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

最初 - 当机器启动时 - 我仍然得到一个 没有 space 设备错误 但很快就解决了。

我 运行 遇到了这个问题,无法为 mac 添加额外的 space 和 docker UI,我安装了 docker使用自制软件和 运行 创建我的 machine 时使用以下命令:

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

这将 space 的内存和磁盘大小添加到我之前拥有的虚拟机中,您可以在此处添加您认为合适的设置大小

运行 docker system df 查看 space 在您的 docker

上占用了什么

然后运行:

docker system prune --all --force

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

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

用您最喜欢的文本编辑器打开 file /lib/systemd/system/docker.service 并替换以下行,其中 /new/path/docker 是您新选择的 docker 目录的位置:

FROM:
ExecStart=/usr/bin/docker daemon -H fd://
TO:
ExecStart=/usr/bin/docker daemon -g /new/path/docker -H fd://

准备就绪时停止docker服务:

# systemctl stop docker

检查 docker 服务是否已停止,以下命令应该不会产生任何结果

# ps aux | grep -i docker | grep -v grep

重新加载守护进程

# systemctl daemon-reload

完成此操作后,创建一个您在上面指定的新目录,并可选择 rsync 当前 docker 数据到新目录:

# mkdir /new/path/docker
# rsync -aqxP /var/lib/docker/ /new/path/docker

# systemctl start docker

确认 docker 运行到新目录

#  ps aux | grep -i docker | grep -v grep

https://linuxconfig.org/how-to-move-docker-s-default-var-lib-docker-to-another-directory-on-ubuntu-debian-linux