环境版本:
macos 10.14.4
docker server 18.09.2
docker desktop Version 2.0.0.3 (31259)
面临no space left on device
容器内部的错误,无法确定溢出来自何处。
最糟糕的是,我无法从母主机系统的角度确定实际的容器大小(info/inpsect/system df 工具),事实上来自 docker 和母主机的统计数据并不相等 :/
我有一个容器,里面有以下 df 统计数据:
root@31a71014ad95:/usr/local/app# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 63G 21G 40G 34% /
tmpfs 64M 0 64M 0% /dev
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
osxfs 234G 182G 48G 80% /shared_from_host
/dev/sda1 63G 21G 40G 34% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 2.0G 0 2.0G 0% /proc/acpi
tmpfs 2.0G 0 2.0G 0% /sys/firmware
(shared_from_host
- 是与母主机交互的共享卷)
值得一提的是,我读过有关 macos 上的一般图像文件大小的文章,它看起来还可以,而且远离默认的 64Gb 大小:
ls -lah ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
-rw-r--r--@ 1 coin staff 21G May 26 22:25 /Users/usss/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Docker 容器肯定包含一个很大的子目录:
root@31a71014ad95:/usr/local/app# du -hs ./*|grep CRISP
12G ./CRISPRCasFinder
我看到ps -s
、inspect
、system df
作为估计容器磁盘使用情况统计数据的推荐方法,但没有成功。它们都显示非实际值。所以看来我以错误的方式使用这些工具,我以错误的方式解释数字。
从母宿主来看,统计数据如下:
docker inspect
给出https://pastebin.com/53vLji1pdocker ps -s
给出
%docker container ps -sa
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
31a71014ad95 nvm:nvm_tag "/bin/bash" 6 hours ago Exited (137) 23 minutes ago cr 3.52GB (virtual 5.44GB)
<...>
docker system df
给出
%docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 8 6 5.52GB 3.021GB (54%)
Containers 6 0 3.541GB 3.541GB (100%)
Local Volumes 33 6 2.751GB 2.381GB (86%)
Build Cache 0 0 0B 0B
这些值都不像 du 的容器使用情况(如上所示)。这些值是我应该寻找的东西吗?
我发现最有用、最详细的例子是https://www.projectatomic.io/blog/2016/03/daemon_option_basedevicesize/
但是,似乎在我当前的docker版本输出中不再包含作者用于说明的字段-没有“基本设备大小”,没有“DeviceSize”
所以问题是:
我如何才能看到真实的容器使用情况统计数据,以便我可以进行一些调整。
最大容器磁盘大小的配置放在哪里?
谢谢你!
更新
我尝试重新启动 docker 应用程序,但最终出现了致命的空间错误 -https://pastebin.com/twM3qN8N
所以 docker 目前根本无法启动。好吧...我在 gh 上也发现了类似的问题 -https://github.com/docker/for-mac/issues/3529
我之前看到过一些关于错误行为的问题,删除 qcow2 文件可以解决问题,但总是存在空间问题,used
大小configured
接近,问题出在调整大小上。但这个问题似乎与我的问题类似,因为问题作者的 qcow2 文件大小似乎足够大。
我看到临时的解决方法是清除所有数据,但希望在进行强制清除之前找到替代方案,或者至少找到有关磁盘使用情况指标的某种解释。
更新2
部分决策未明确,但没有理解
继续阅读各种文章,阅读后http://phutchins.com/blog/2017/01/04/fixing-docker-no-space-left-on-device/
注意到奇怪的 20Gb 限制,这是 2017 年的默认限制。然后思考了一下。让我们想象一下,尽管df -h
容器内部和docker desktop
UI 设置报告了 64Gb,但我仍然有 20Gb 的限制。看起来可能吗?
并安装 qemu 并向图像中添加 +5Gb,如文章中所述:
%qemu-img resize ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 +5G
瞧,一切已启动并运行。我仍然看到 qemu 文件的大小相同:
%ls -lah ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
-rw-r--r--@ 1 usss staff 21G May 27 00:46 /Users/usss/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
但从容器的角度来看用法发生了一些变化
root@31a71014ad95:/usr/local/app# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 68G 21G 45G 32% /
tmpfs 64M 0 64M 0% /dev
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
osxfs 234G 178G 55G 77% /shared_from_host
/dev/sda1 68G 21G 45G 32% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 2.0G 0 2.0G 0% /proc/acpi
tmpfs 2.0G 0 2.0G 0% /sys/firmware
现在声明可使用45Gb(上面有40Gb)。
但至少现在一切都正常了,但完全不了解shadowed
消耗隐藏在哪里。
答案1
桌面版 docker 的磁盘空间可能受您提供给嵌入式 docker VM 的磁盘限制。此 VM 内部是图像、容器、命名卷以及未从外部源(例如 MacOS 上的 /Users 目录)明确安装到 VM 中的任何其他文件。您可以从 docker 首选项中调整此 VM 的设置:
更多详细信息请访问:https://docs.docker.com/docker-for-mac/space/
关于磁盘使用情况,有一点需要注意,磁盘字节数可能会用尽,inode 也可能会用尽。两者都会给出相同的错误。使用选项df -i
检查 indoes,例如:
df -h # to see disk free
df -hi # to see inodes free
如果在容器运行时发生错误,然后删除容器,则删除容器可能会释放磁盘空间。