GCP Batch使用Docker镜像启动时出现磁盘空间不足错误
解决GCP Batch容器启动磁盘空间不足问题
错误详情
{ "textPayload": "docker: Error response from daemon: mkdir /var/lib/docker/overlay2/8000fd83d3d88faf613413bc2bf93c89664bfc45daf4e0f3783e4a754f02a27f-init: no space left on device.\nSee 'docker run --help'.\n", "insertId": "10wsnp3f2rht1y", "resource": { "type": "generic_task", "labels": { "task_id": "task/j-9b13c8c6-9371-4d43-b000-ce596b1bcac0-group0-3634/0/0", "job": "j-9b13c8c6-9371-4d43-b000-ce596b1bcac0", "project_id": "ml-experiments-379111", "namespace": "", "location": "europe-west6-c" } }, "timestamp": "2023-03-02T20:23:35.566591749Z", "severity": "ERROR", "labels": { "hostname": "j-9b13c8c6-9371-4d43-b000-ce596b1bcac0-group0-0-2ss2", "job_uid": "j-9b13c8c6-9371-4d43-b000-ce596b1bcac0", "task_group_name": "projects/486015383666/locations/europe-west6/jobs/cpuart-real-50000-60000/taskGroups/group0" }, "logName": "projects/ml-experiments-379111/logs/batch_task_logs", "receiveTimestamp": "2023-03-02T20:23:35.587286849Z" }
解决思路
增大实例系统盘容量
GCP Batch默认实例系统盘容量偏小(通常10GB),Docker运行时的overlay2目录会占用大量空间。在任务组配置中指定更大的磁盘容量,例如:taskGroups: - taskCount: 100 template: instanceTemplate: machineType: n1-standard-1 bootDisk: type: pd-standard sizeGb: 30添加任务预处理清理步骤
在任务启动前执行清理脚本,释放Docker缓存和临时文件,避免磁盘累积。在任务定义中添加预处理命令:tasks: - runnables: - script: text: | # 清理Docker缓存 docker system prune -af # 清理/tmp目录 rm -rf /tmp/* - container: imageUri: your-image-uri优化容器镜像体积
使用多阶段构建减小镜像大小,移除镜像内的冗余文件(如apt/yum缓存、构建临时文件),减少Docker创建overlay层时的磁盘占用。例如多阶段构建示例:# 构建阶段 FROM golang:1.20 AS builder WORKDIR /app COPY . . RUN go build -o app . # 运行阶段 FROM alpine:latest WORKDIR /app COPY --from=builder /app/app . RUN rm -rf /var/cache/apk/* CMD ["./app"]限制实例复用次数
配置任务组的maxTasksPerInstance参数,让实例运行指定数量的任务后自动销毁重建,避免多次任务运行后磁盘被占满:taskGroups: - taskCount: 100 maxTasksPerInstance: 5 template: # 实例配置...挂载临时磁盘到Docker存储目录
创建附加临时磁盘并挂载到/var/lib/docker,将Docker的存储转移到临时磁盘,不占用系统盘空间:taskGroups: - taskCount: 100 template: instanceTemplate: machineType: n1-standard-1 disks: - boot: true type: pd-standard sizeGb: 10 - type: pd-standard sizeGb: 50 mountPath: /var/lib/docker
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

