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-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卷命令。内置命令还会删除 /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
我正在尝试使用 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-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卷命令。内置命令还会删除 /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(可能包含容器/图像)
我 运行 遇到了这个问题,无法为 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