You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2 Ubuntu实例挂载30GB空闲卷但构建Docker镜像时提示磁盘空间不足

EC2 Ubuntu实例挂载30GB空闲卷但构建Docker镜像时提示磁盘空间不足

我来帮你解决这个问题!核心原因很简单:Docker 默认把镜像、容器、缓存这些数据都存在根分区的 /var/lib/docker 目录下,而你的根分区(/dev/root)已经用了89%,自然会提示空间不足——你挂载的30GB卷目前只是躺在 /mnt/ebs_volume 没被Docker用上。

下面给你两种可行的解决方案,按需选择:


方法一:用软链接快速迁移Docker数据目录

这种方法操作简单,适合快速解决问题:

  1. 先停掉Docker服务,防止操作过程中数据损坏:
sudo systemctl stop docker
sudo systemctl stop docker.socket
  1. 备份现有Docker数据(这步可选,但强烈建议做,以防万一):
sudo rsync -aP /var/lib/docker/ /mnt/ebs_volume/docker/
  1. 重命名原Docker目录,留作备份(后面确认没问题可以删除):
sudo mv /var/lib/docker /var/lib/docker.old
  1. 创建软链接,让Docker把新的存储目录指向挂载的卷:
sudo ln -s /mnt/ebs_volume/docker /var/lib/docker
  1. 启动Docker服务,验证是否正常:
sudo systemctl start docker

启动后可以跑个docker info,看输出里的Docker Root Dir是不是变成/mnt/ebs_volume/docker了,或者拉个小镜像测试下,再用df -h看看根分区的占用情况。


方法二:修改Docker配置文件(更规范的长期方案)

如果你觉得软链接不够优雅,可以直接修改Docker的配置文件来指定存储路径:

  1. 停掉Docker服务(和上面步骤一致):
sudo systemctl stop docker
sudo systemctl stop docker.socket
  1. 迁移现有数据到挂载卷:
sudo rsync -aP /var/lib/docker/ /mnt/ebs_volume/docker/
  1. 创建/修改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
  1. 启动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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 08:28:16