EC2 Ubuntu实例挂载30GB空闲卷但构建Docker镜像时提示磁盘空间不足
EC2 Ubuntu实例挂载30GB空闲卷但构建Docker镜像时提示磁盘空间不足
我来帮你解决这个问题!核心原因很简单:Docker 默认把镜像、容器、缓存这些数据都存在根分区的 /var/lib/docker 目录下,而你的根分区(/dev/root)已经用了89%,自然会提示空间不足——你挂载的30GB卷目前只是躺在 /mnt/ebs_volume 没被Docker用上。
下面给你两种可行的解决方案,按需选择:
方法一:用软链接快速迁移Docker数据目录
这种方法操作简单,适合快速解决问题:
- 先停掉Docker服务,防止操作过程中数据损坏:
sudo systemctl stop docker sudo systemctl stop docker.socket
- 备份现有Docker数据(这步可选,但强烈建议做,以防万一):
sudo rsync -aP /var/lib/docker/ /mnt/ebs_volume/docker/
- 重命名原Docker目录,留作备份(后面确认没问题可以删除):
sudo mv /var/lib/docker /var/lib/docker.old
- 创建软链接,让Docker把新的存储目录指向挂载的卷:
sudo ln -s /mnt/ebs_volume/docker /var/lib/docker
- 启动Docker服务,验证是否正常:
sudo systemctl start docker
启动后可以跑个docker info,看输出里的Docker Root Dir是不是变成/mnt/ebs_volume/docker了,或者拉个小镜像测试下,再用df -h看看根分区的占用情况。
方法二:修改Docker配置文件(更规范的长期方案)
如果你觉得软链接不够优雅,可以直接修改Docker的配置文件来指定存储路径:
- 停掉Docker服务(和上面步骤一致):
sudo systemctl stop docker sudo systemctl stop docker.socket
- 迁移现有数据到挂载卷:
sudo rsync -aP /var/lib/docker/ /mnt/ebs_volume/docker/
- 创建/修改Docker守护进程配置文件:
如果/etc/docker/daemon.json不存在,就创建它:
sudo nano /etc/docker/daemon.json
在文件里添加以下内容(指定新的存储根目录):
{ "data-root": "/mnt/ebs_volume/docker" }
保存退出(nano里按Ctrl+O,回车,再Ctrl+X)。
4. 重命名原Docker目录:
sudo mv /var/lib/docker /var/lib/docker.old
- 启动Docker服务并验证:
sudo systemctl start docker
同样用docker info确认存储路径是否正确。
额外注意事项
- 确保你的30GB卷是开机自动挂载的!否则重启EC2后卷没挂载,Docker会找不到存储目录而报错。可以通过修改
/etc/fstab文件来实现,比如添加类似这样的行(根据你的卷设备名调整):
/dev/nvme1n1 /mnt/ebs_volume ext4 defaults 0 0
修改后可以用sudo mount -a测试是否能正常挂载,没有报错就没问题。
- 确认
/mnt/ebs_volume/docker目录的权限是正确的,默认挂载的卷权限是root,Docker需要的读写权限是满足的,不用额外调整。 - 等你确认Docker运行正常、数据没问题后,可以删掉原来的
/var/lib/docker.old目录,释放根分区的空间:
sudo rm -rf /var/lib/docker.old
备注:内容来源于stack exchange,提问作者cami
相关产品推荐
相关产品推荐

