GCP中Docker Run报‘设备上没有剩余空间’的问题排查与扩容
GCP中Docker镜像存储及空间扩容解决方案
关于GCP的Docker存储分配
GCP默认将Docker的镜像、容器数据存储在VM实例的根磁盘中,根磁盘有固定的默认容量(通常为10GB,具体取决于实例类型)。即使是新账号,若你的镜像体积较大,也会耗尽根磁盘剩余空间,导致docker run时报错“设备上没有剩余空间”。
扩容解决方案
方案一:扩容VM根磁盘
这是最直接的方法,适用于不想额外挂载磁盘的场景:
- 停止目标VM实例(部分实例类型支持在线扩容,但停止操作更稳妥)
- 在GCP控制台进入该VM的详情页,切换到「磁盘」标签,选中根磁盘后点击「编辑」
- 修改磁盘大小为所需容量(例如20GB或更大),保存设置
- 启动VM实例,登录后扩展文件系统:
- 若使用ext4文件系统,执行:
resize2fs /dev/sda1(可通过df -h确认根挂载点对应的设备名) - 若使用xfs文件系统,执行:
xfs_growfs /
- 若使用ext4文件系统,执行:
方案二:挂载额外持久磁盘存储Docker数据
如果不想扩容根磁盘,可单独挂载一块持久磁盘专门用于Docker存储:
- 在GCP控制台创建一块新的持久磁盘,设置合适的容量
- 将该磁盘挂载到目标VM实例上
- 登录VM,格式化磁盘(假设磁盘设备名为
/dev/sdb):mkfs.ext4 /dev/sdb - 创建新的Docker数据目录:
mkdir -p /var/lib/docker-new - 挂载磁盘到新目录:
mount /dev/sdb /var/lib/docker-new - 停止Docker服务:
systemctl stop docker - 迁移原Docker数据到新目录:
rsync -a /var/lib/docker/ /var/lib/docker-new/ - 备份原Docker目录:
mv /var/lib/docker /var/lib/docker-old - 配置Docker使用新存储路径(二选一):
- 方式1:创建软链接:
ln -s /var/lib/docker-new /var/lib/docker - 方式2:编辑
/etc/docker/daemon.json,添加配置:{ "data-root": "/var/lib/docker-new" }
- 方式1:创建软链接:
- 启动Docker服务:
systemctl start docker - 验证配置:执行
docker info | grep "Docker Root Dir",确认路径已更新为新目录
额外排查建议
- 执行
docker system df查看Docker的详细空间占用,确认是否有未清理的临时构建缓存(可尝试docker builder prune清理构建缓存)
内容的提问来源于stack exchange,提问作者Kristada673
相关产品推荐
相关产品推荐

