我使用的是Mac电脑,我习惯在我电脑上Build镜像之后在推送到私有Registry。
然而,今天我正要构建一个镜像时出现了错误
no space left on device
提示空间不够了。Docker使用分层存储技术很大程度上避免了空间浪费,但日积月累的也会有爆满的时候,就像垃圾桶一样,堆满了自然无法容纳更多的垃圾。Mac上安装了Docker程序之后默认占用磁盘空间为64GB,所以要解决空间不够的问题可以从两方面下手
调大磁盘空间
点开图标,在下拉菜单中选择Preferences...
,在弹开的界面顶部中选择Disk
菜单
从上图中我们看到下面有一个Disk image size: 64GB
,表示默认Docker程序的镜像文件会占用磁盘最多64GB,如果你的历史镜像已达到这个容量,那么你在运行Docker命令运行或者打包的时候很容易出现no space left on device
的提示,我们把它调大一点
点击Apply
按钮后Docker程序会自动重启,如果重启成功那么应该可以继续使用了
清除镜像
如果你的Mac电脑磁盘容量紧张,不愿意话费更多的空间给Docker使用,也可以清除文件留出空间来运行新的镜像,可以使用以下命令进行清除
$ docker system prune -a
WARNING! This will remove:
- all stopped containers
- all volumes not used by at least one container
- all networks not used by at least one container
- all images without at least one container associated to them Are you sure you want to continue? [y/N]
在弹出的警告中提示你将会清除的内容:
- 所有已停止的容器
- 没有至少被一个容器使用过的所有volumes
- 没有至少被一个容器使用过的所有networks
- 没有至少被一个容器相关的images
当你选择y
,稍等几分钟会看到类似Total reclaimed space: [Number] GB.
表示已经回收了多少空间,如我的执行结束后提示我回收了将近50GB的空间
注意
由于Docker在Linux上使用overlay2做为存储驱动,这种驱动会使用所有主机空间和内存,没有办法限制它占用磁盘空间大小,也没有办法给它更多除非加硬盘。而在Docker在Mac上同Windowns一样运行在一个虚拟机里,所以很容易通过限制虚拟机磁盘占用大小来达到这个目的。