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硬盘爆满的问题, 因为你所有的操作数据都将落到了你指定的硬盘目录了。