解决macos下 Docker.raw 预分配文件占用空间过大问题

mac系统下安装Docker Desktop后,默认这预分配文件(~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw )的占用空间会随着docker的使用越来越大。。。。

  解决方案: 将这个文件移动到外置USB移动硬盘上面。

方案一:  修改docker启动配置文件增加data-root 启动项

(此方案仅在你的外置硬盘格式为ext4 的情况下推荐, 即你的外置硬盘格式为 linux格式或者mac系统格式)

根据官方文档,修改docker默认数据目录可以通过在docker的启动配置文件( ~/.docker/daemon.json )中增加一个配置项 data-root  如下图:

 这样的话就将docker的默认数据存储目录移动到了你指定的目录中, 这个是官方的方式,如果你移动的目录是NTFS格式的外置的USB移动硬盘,这种运动后 k3d 和其他的对外挂目录权限有要求的应用就无法正确运行。

方案二:只移动Docker.raw 预分配文件到外置硬盘 支持windows ntfs分区

针对方案一的问题的解决方法是,只移动Docker.raw 预分配文件到外置硬盘。 移动脚本如下:

移动脚本名称: move_docker_raw.sh

#!/bin/bash
# Docker预分配文件存储位置移动到外置硬盘脚本
# author tekintian@gmail.com
# 
# 使用方法: sh move_docker_raw.sh 根据提示输入要移动到的目录即可,
# 注意事项:
# 1. 启动前先退出docker;
# 2. 此操作会清空当前docker中的所有数据,包括本地镜像和配置信息等!
# 
# 移动Docker 预分配文件目录
function moveDockerVmsData(){
	local todir=$1
	# echo "todir: $todir"
	# 清理日志文件
	rm -rf ~/Library/Containers/com.docker.docker/Data/log/host/*
	rm -rf ~/Library/Containers/com.docker.docker/Data/log/vm/*
	rm -rf ~/Library/Application Support/Caches/*

	if [[ -d ~/Library/Containers/com.docker.docker/Data/vms/0/data ]];then
		# 需要先删除原来的目录
		rm -rf ~/Library/Containers/com.docker.docker/Data/vms/0/data
	else
		echo "~/Library/Containers/com.docker.docker/Data/vms/0/data文件不存在,请先启动Docker然后再退出Docker后再操作!否则可能无法启动Docker"
		exit 1
	fi

	if [[ -d ${todir} ]];then
		rm -rf ${todir}
	fi

	mkdir -p ~/Library/Containers/com.docker.docker/Data/vms/0
	mkdir -p ${todir}
	# 连接目录
	ln -sf ${todir} ~/Library/Containers/com.docker.docker/Data/vms/0/data

	echo "Docker预分配文件移动成功! 请重新启动Docker"
}

function getMoveToDir(){
	while :; do echo
	  read -p "请输入要移动到的目录(绝对路径,默认:/Volumes/MyUSB/docker/vms/0/data ): " to_dir
	  # 这种默认值
	  [ -z "${to_dir}" ] && to_dir="/Volumes/MyUSB/docker/vms/0/data"
	  if [[ ! -d $to_dir && -n "$to_dir" ]]; then
	  	if [[ "${to_dir:0:1}" == "/" ]];then
	  		echo "你输入的目录${to_dir} 不存在! 自动创建中!"
		    mkdir -p ${to_dir}
		    if [[ ! -d "${to_dir}" ]];then
		      echo "目录 ${to_dir} 创建失败!"
		      exit 1
		    else
		    	# 显示移动确认信息
				while :; do echo
				  echo "请注意移动前必须先退出Docker, 且此移动操作会清空目前docker中的所有相关数据!"
				  echo 
				  read -p "你确定要将Docker预分配文件存储路径移动到 ${to_dir} ? [y,n]: " to_yn
				  if [[ ! $to_yn =~ ^[yn]$ ]]; then
				    echo "输入错误! 请输入 y 或者 n "
				  else
				    break
				  fi
				done
		    fi
		     break
	  	else
	  		echo "你当前输入的路径 ${to_dir} 非绝对路径,请重试!"
	  	fi
	   
	  fi
	done
}

getMoveToDir

# echo "to_dir: ${to_dir}  to_yn:${to_yn}"
if [[ -n "${to_dir}" && "${to_yn}" == "y" ]];then
	moveDockerVmsData "${to_dir}"
else
	echo "GoodBye!"
fi

使用方法: 将上述代码保存到你的mac 

使用方法: sh move_docker_raw.sh 根据提示输入要移动到的目录即可,


注意事项:
1. 启动前先退出docker;
 2. 此操作会清空当前docker中的所有数据,包括本地镜像和配置信息等!
 

这个操作后, 你就可以放心大胆的在你的mac中使用docker了,再也不用担心你的mac硬盘爆满的问题, 因为你所有的操作数据都将落到了你指定的硬盘目录了。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值