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

Drone流水线偶发No space left on device报错但宿主机空间充足求解

可行解决方案

1. 清理Docker冗余资源(偶发报错最高发原因)

偶发磁盘不足但宿主机整体空间充足,绝大多数情况是Docker层面积累的冗余资源触碰到使用阈值,包括未清理的Drone构建临时容器、悬空镜像、废弃构建缓存、停止的旧容器等。

  • 执行一次性全量清理命令:
    docker system prune -af
    
    该命令会清理所有未被使用的镜像、停止的容器、闲置网络、全量构建缓存,无需二次确认。
  • 配置Docker自动缓存清理,避免后续重复出现问题:
    编辑/etc/docker/daemon.json文件,新增以下配置:
    {
      "builder": {
        "gc": {
          "enabled": true,
          "defaultKeepStorage": "20GB"
        }
      }
    }
    
    保存后执行systemctl restart docker重启Docker服务生效,配置后Docker会自动清理超过20GB的构建缓存。

2. 调整Drone Runner资源配置

你当前提供的是Drone服务端的启动命令,实际执行构建任务的是Drone Runner组件,绝大多数的空间限制都是Runner的配置不合理导致:

  • 启动Drone Runner时新增磁盘配额参数,将单构建容器的可写层上限调整为50GB(可根据实际需求修改大小):
    docker run -d \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -e DRONE_RPC_PROTO=https \
      -e DRONE_RPC_HOST=drone.example.com \
      -e DRONE_RPC_SECRET=super-duper-secret \
      -e DRONE_RUNNER_CAPACITY=2 \
      -e DRONE_RUNNER_NAME=runner-1 \
      --storage-opt size=50G \
      --restart always \
      --name runner \
      drone/drone-runner-docker:1
    
  • 如果你使用Docker-in-Docker(dind)模式运行构建,需要额外给dind容器配置存储上限,启动时添加参数--storage-opt dm.basesize=50G即可。

3. 调整Docker全局存储限制

如果需要全局修改所有容器的默认磁盘上限,可修改Docker全局配置:
编辑/etc/docker/daemon.json文件,新增存储驱动相关配置:

{
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.size=100G"
  ]
}

保存后执行以下命令重启服务生效:

systemctl daemon-reload && systemctl restart docker

该配置会限制宿主机上所有容器的可写层最大为100GB,避免单容器无限制占用磁盘。

4. 流水线层面优化

部分场景是单流水线构建产生的临时文件过大导致,可从流水线侧优化:

  • 在流水线步骤末尾增加临时文件清理逻辑,删除构建过程中产生的中间产物、依赖缓存、临时安装包等
  • 开启Drone Runner的特权权限DRONE_RUNNER_PRIVILEGED=true,配置后Runner会在每个构建任务结束后自动销毁对应容器和临时存储,避免残留。

排查技巧

下次出现报错时,可先在宿主机执行docker system df查看Docker各维度存储占用情况,可快速定位是镜像、容器还是缓存占用过高导致的问题。

内容的提问来源于stack exchange,提问作者112Legion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:54:00