Docker for Mac 的宿主虚拟机的磁盘容量最近总是见底,总是No space left on device
错误,各种pull不下来镜像,可又舍不得重置docker,于是开始折腾。
首先尝试网上的各种已经存在的方式,如清理docker中的不用的镜像,然并卵,磁盘限制的总量并不会改变。
所以扩充Docker for Mac虚拟机磁盘容量的大小才是解决这个问题的正途。
于是乎,本文就是介绍一种不丢失现有docker镜像的前提下,扩充docker的虚拟机磁盘容量的方法。
找到镜像的位置
在Docker for Mac的preference中可以看到硬盘镜像的位置
即~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
查询镜像的信息
首先关闭docker,确保docker没有在继续运行。
Docker for Mac 自带了 qemu-img
工具,可以通过 /Applications/Docker.app/Contents/MacOS/qemu-img
直接在terminal中调用,所以可以先通过qemu-img
可以查询镜像的具体信息
image: /Users/rui/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
file format: qcow2
virtual size: 84G (90194313216 bytes)
disk size: 15G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
refcount bits: 16
corrupt: false
发现了奇怪的问题,分明设置了84G的虚拟硬盘,为什么现在15G就提示无硬盘空间了呢?
扩充镜像的空间
如果您在查询镜像信息时,发现的确磁盘占用的空间和虚拟镜像设定的空间基本一致的话,那么需要多做一个步骤,增加虚拟磁盘的大小(virtual size
)
/Applications/Docker.app/Contents/MacOS/qemu-img resize ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 +20G
这个指令可以增加Docker.qcow2
20G的磁盘空间,通过这个操作后就可以继续下面的部分了。
磁盘分析
本地安装qemu brew install qemu
同时下载gparted镜像 gparted 我使用的是gparted-live-0.28.1-1-i686.iso
准备完成后 备份当前的虚拟磁盘镜像 然后通过qemu挂载磁盘启动gparted系统
qemu-system-x86_64 -drive file=Docker.qcow2 -m 512 -cdrom ~/Downloads/gparted-live-0.28.1-1-i686.iso -boot d -device usb-mouse -usb
启动gparted进入GUI界面后,打开gparted工具可以发现当前磁盘的分区设置的磁盘大小有限,看来需要修改分区大小才能解决啦~
调整分区
直接通过gparted调整分区大小会导致数据丢失等问题,我尝试了一次后发现调整了大小的镜像无法顺利启动docker,于是只有通过其他方式来调整。
关闭gparted工具后,在虚拟机桌面可以打开Terminal,进入Terminal后利用fdisk调整分区。
通过指令删除掉/dev/sda1
的分区,再重新建立即可。
sudo fdisk /dev/sda
d
1
n
p
1
enter
enter
w
看到提示成功写入新的分区表,这时候可以关闭gparted,启动docker查看效果
可以看到docker中的磁盘空间已经足够用啦~