Github Action运行空间不足,Docker容器内如何清理主机冗余工具?
解决Docker容器中Github Action主机空间不足的问题
核心问题说明
当你在Job中指定container字段后,默认所有步骤都会在容器内执行,没有直接操作主机的权限。但可以通过以下几种方式解决空间不足:
方案1:在单个步骤中切换到主机环境执行清理
在需要清理主机的步骤中添加container: false,让该步骤直接在主机(ubuntu-latest)上运行,执行清理命令:
jobs: compile: name: Run Sonarqube runs-on: ubuntu-latest container: image: my_image:latest steps: - name: Clean up host machine container: false # 该步骤在主机环境执行 run: | # 卸载主机上的无用残留包 sudo apt-get remove -y --purge $(dpkg -l | grep '^rc' | awk '{print $2}') sudo apt-get autoremove -y sudo apt-get clean # 深度清理Docker缓存(镜像、容器、卷等) docker system prune -af --volumes - name: Checkout code uses: actions/checkout@v3 with: # 你的配置内容
方案2:优化你的Docker镜像体积
从根源减少容器占用的空间,在Dockerfile中添加清理步骤:
- 使用多阶段构建,只保留运行时需要的文件
- 安装依赖后立即清理包管理工具的缓存
- 删除镜像中不必要的工具、日志和临时文件
示例Dockerfile片段:
# 构建阶段 FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm install && npm cache clean --force # 运行阶段 FROM node:18-alpine WORKDIR /app COPY --from=builder /app/node_modules ./node_modules COPY . . # 清理系统缓存 RUN apk add --no-cache tzdata && rm -rf /var/cache/apk/*
方案3:清理容器内的临时文件和缓存
如果空间不足是容器内部导致的,在容器内的步骤中添加清理命令:
- name: Clean up container cache run: | # 清理npm/yarn缓存 npm cache clean --force # 删除容器内的临时文件 rm -rf /tmp/* # 清空系统日志文件 truncate -s 0 /var/log/*.log
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

