AWS EC2中无法扩展Docker存储容量,请求技术支持
解决AWS EC2上Docker "no space left on device" 错误
首先,你遇到的dm.basesize报错是因为这个参数只适用于devicemapper存储驱动,而你的Docker使用的是overlay2驱动,所以这个配置完全不兼容,这就是操作失败的核心原因。
接下来我们一步步解决根目录满导致Docker空间不足的问题:
1. 先清理Docker冗余资源(快速释放空间)
你的根目录/dev/xvda1已经99%占用,而Docker的数据默认存在/var/lib/docker(属于根分区),先清理掉无用的Docker资源:
- 停止Docker服务:
sudo service docker stop - 清理所有停止的容器、未使用的镜像、网络和卷(注意:这会删除无引用的资源,确认后输入
y):sudo docker system prune -a - 如果还需要更多空间,可以手动删除大的无用镜像:
先查看所有镜像:
然后删除指定镜像:sudo docker imagessudo docker rmi <IMAGE_ID>
2. 迁移Docker数据目录到额外存储卷(彻底解决空间问题)
既然你已经添加了额外存储卷,我们可以把Docker的数据目录迁移到这个卷上,避免再占用根分区空间:
步骤1:准备额外存储卷
假设你的额外卷是/dev/xvdb(可以通过lsblk命令确认):
- 格式化新卷(如果是新卷、无数据的情况下执行):
sudo mkfs.ext4 /dev/xvdb - 创建挂载目录:
sudo mkdir -p /mnt/docker-data - 挂载卷:
sudo mount /dev/xvdb /mnt/docker-data - 设置开机自动挂载,编辑
/etc/fstab文件:
添加以下内容到文件末尾:sudo nano /etc/fstab
保存退出(按/dev/xvdb /mnt/docker-data ext4 defaults,nofail 0 2Ctrl+O,回车,再Ctrl+X)。
步骤2:迁移Docker数据并修改配置
- 复制现有Docker数据到新目录:
sudo rsync -aX /var/lib/docker/ /mnt/docker-data/ - 备份原Docker目录:
sudo mv /var/lib/docker /var/lib/docker.old - 创建Docker配置文件指定新的数据目录:
如果/etc/docker/daemon.json不存在,创建它:
添加以下JSON内容:sudo nano /etc/docker/daemon.json
保存退出。{ "data-root": "/mnt/docker-data" }
步骤3:验证配置
- 启动Docker服务:
sudo service docker start - 查看Docker信息,确认
Docker Root Dir已经变成/mnt/docker-data:docker info - 确认Docker正常运行后,可以删除原备份目录(释放根分区空间):
sudo rm -rf /var/lib/docker.old
关键说明
overlay2驱动直接使用宿主机文件系统的空间,没有类似dm.basesize的独立空间限制,所以只要它的数据目录所在的卷有足够空间,就不会再出现空间不足的问题。- 清理Docker资源前,记得备份重要的镜像(可以用
docker save -o my-image.tar <IMAGE_ID>导出,迁移后用docker load -i my-image.tar导入)。
内容的提问来源于stack exchange,提问作者YogevAbr
相关产品推荐
相关产品推荐

