如何扩容运行容器镜像的Google Cloud Compute实例Docker分区
你遇到的Docker分区容量不足的根本原因是GCE容器优化OS默认启动盘仅为10GB,实际分配给用户数据和Docker存储的stateful分区仅5.7GB,系统自动扩容的前提是先手动扩大底层云启动盘的容量,具体扩容方案如下:
解决方案
方案1:新实例部署(推荐生产环境重构时使用)
创建实例时直接指定启动盘容量,避免后续扩容操作,只需在原有创建命令中新增两个参数即可:
- 新增
--boot-disk-size=50GB参数,容量可根据业务需求调整,建议至少预留20GB以上空间 - 可选新增
--boot-disk-type=pd-balanced参数调整磁盘性能
修改后的创建命令参考:
gcloud compute instances create-with-container $INSTANCE_NAME \ --zone=europe-north1-a \ --container-image gcr.io/my-project/my-image:latest \ --container-mount-host-path mount-path=/var/www/html,host-path=/var/www/html,mode=rw \ --machine-type="$MACHINE_TYPE" \ --boot-disk-size=50GB \ --boot-disk-type=pd-balanced
该方式创建的实例启动后会自动完成分区扩容,无需额外手动操作。
方案2:现有生产实例在线扩容(无需重建实例,无业务中断)
共3步,全程不需要停止实例或运行业务的容器:
- 扩容实例对应的云启动盘容量
可以直接通过gcloud命令操作,示例为扩容到50GB:
gcloud compute disks resize $INSTANCE_NAME --zone europe-north1-a --size 50GB
执行后等待1-2分钟让磁盘扩容生效。
2. 登录实例触发系统分区自动扩容
GCE容器优化OS自带根分区扩容工具,直接执行以下命令:
sudo rootfs-expand
执行后等待数秒即可完成分区扩展。
3. 验证扩容结果
执行df -h查看分区容量,此时/dev/sda1和对应的Docker overlay分区容量会同步更新为扩容后的大小。
注意事项
- 若业务需要长期存储大量网站数据,建议单独创建持久化磁盘挂载到实例后再映射到容器内,实现数据和系统盘分离,后续扩容数据盘不会影响系统运行,也可避免系统盘占满导致的业务故障。
- 可配置定时任务定期执行
docker system prune -af清理冗余的镜像、容器、卷资源,避免无效资源占用磁盘空间。
内容的提问来源于stack exchange,提问作者Oskar Koli
相关产品推荐
相关产品推荐

