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

GitHub Actions使用actions/upload-artifact上传Docker卷文件时权限被拒

根本原因

报错的核心原因不是目标文件本身的权限不足,而是GitHub Actions默认使用runner用户执行所有步骤,Docker卷的存储父目录/var/lib/docker/volumes/默认只有root用户有访问权限,runner用户没有上层目录的遍历权限,哪怕你修改了最内层文件的权限,也无法访问到目标文件。

推荐解决方案

最稳妥、兼容性最高的方案是将文件从Docker卷拷贝到当前工作目录后再上传,完全避免触碰系统目录权限,修改后的Action步骤如下:

name: Action
on:
  push:
    
jobs:
  example:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Compose Containers and Run 
        run: |
          docker-compose up --abort-on-container-exit
      
      - name: Copy test file from Docker volume
        run: |
          # 启动临时容器同时挂载目标卷和当前工作目录,将文件拷贝到工作目录
          docker run --rm -v example_reports:/vol-src -v $(pwd):/output ubuntu cp /vol-src/test.txt /output/

      - name: Upload test.txt
        uses: actions/upload-artifact@v2
        with:
          name: test.txt
          path: test.txt

如果有多个报告文件需要拷贝,可以把cp命令替换成cp -r /vol-src/* /output/批量拷贝。

替代方案(不推荐)

如果你需要直接从Docker卷路径读取文件,可以给上层目录追加遍历权限:

- name: Fix directory permissions
  run: |
    # 给所有父目录追加执行权限(即目录遍历权限)
    sudo chmod +x /var/lib/docker/volumes/
    sudo chmod +x /var/lib/docker/volumes/example_reports/
    sudo chmod +x /var/lib/docker/volumes/example_reports/_data/
    # 给目标文件追加读权限
    sudo chmod ugo+r /var/lib/docker/volumes/example_reports/_data/test.txt

该方案仅适配当前Docker默认存储路径的场景,兼容性较差,且修改系统目录权限存在安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:54:04