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

自建GitHub Actions服务器数小时内磁盘空间耗尽问题求助

解决方案:让GitHub Actions容器完全不写入磁盘

针对你的场景,完全可以实现让GitHub Actions生成的容器不写入磁盘,核心是利用tmpfs内存挂载结合Docker参数配置,彻底避免磁盘占用,同时配合容器自动清理机制解决悬空容器问题。

1. 单个Job级别的临时配置

直接在GitHub Actions的Job容器配置中添加options参数,指定tmpfs挂载点,将容器内需要写入的目录挂载到内存中:

build-js-servers:
  name: Build JS Servers
  runs-on: [self-hosted, docker]
  container:
    image: node:16
    options: >-
      --rm
      --tmpfs /tmp:rw,noexec,nosuid,size=2G
      --tmpfs /usr/src/app:rw,noexec,nosuid,size=4G
      --tmpfs /root:rw,noexec,nosuid,size=1G
  • --rm:容器停止后自动删除,彻底避免悬空容器
  • --tmpfs:指定容器内路径挂载到内存,size限制该挂载点的内存使用量,根据你的构建需求调整;rw允许写入,noexec/nosuid提升安全性

需要根据实际构建流程调整挂载点,比如你的JS构建会写入/node_modules或/build目录,就添加对应的--tmpfs参数。

2. 全局运行器级别的批量配置

如果要让所有自托管运行器上的Job都默认启用该机制,不需要逐个修改Job:

  • 在自托管运行器的启动脚本中添加环境变量ACTIONS_RUNNER_CONTAINER_OPTIONS,指定默认的Docker参数:
    export ACTIONS_RUNNER_CONTAINER_OPTIONS="--rm --tmpfs /tmp:size=2G --tmpfs /usr/src/app:size=4G"
    ./run.sh
    
  • 或者修改运行器的配置文件(runner/.runner),在env字段中添加上述环境变量,确保每次启动都生效。

3. 额外优化:禁用Docker镜像缓存

如果构建过程中会拉取或生成镜像,还可以禁用Docker的镜像缓存,避免无用镜像占用磁盘:

在Job中添加前置步骤执行无缓存构建:

docker build --no-cache -t your-image .

或者修改Docker daemon配置(/etc/docker/daemon.json),自动清理缓存:

{
  "features": {
    "buildkit": true
  },
  "buildkit": {
    "gc": {
      "enabled": true,
      "policy": {"keepStorage": "0GB"}
    }
  }
}

修改后重启Docker daemon:systemctl restart docker

效果说明

通过tmpfs挂载,容器内的所有写入操作都在内存中完成,Job结束后容器被--rm参数自动删除,内存立即释放,完全不会在磁盘上留下任何容器或镜像相关的文件,彻底解决磁盘耗尽和SSD损耗问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:01:28