(GitHub 操作,上传工件)访问拒绝尝试上传文件,尽管已授予完全权限
(GitHub Actions, Upload artifact) Access denied trying to upload a file despite giving it full permissions
描述问题
我正在执行一项操作,从 docker 容器运行 API 测试,生成 report.html。此报告保存在 docker 卷中。
在该操作中,在创建报告后,我尝试在 report.html 上使用 actions/upload-artifact,使用指向它在主机卷中的位置的路径。
问题是当操作尝试执行此操作时我得到 Error: EACCES: permission denied, lstat /path/to/report.html
。
我试图通过在使用该操作之前执行 sudo chmod ugo+rwx /path/to/report.html
来解决此问题,但它没有任何改变。我认为 运行 使用 sudo 的操作会起作用,但似乎不受支持。
如何重现
重现一个类似的例子,我只是在卷中创建了一个 test.txt 文件。
github 操作如下所示:
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: Fix permissions
run: |
sudo chmod ugo+rwx /var/lib/docker/volumes/example_reports/_data/test.txt
- name: Upload test.txt
uses: actions/upload-artifact@v2
with:
name: test.txt
path: /var/lib/docker/volumes/example_reports/_data/test.txt
Dockerfile 很简单:
FROM ubuntu
ENTRYPOINT [ "/bin/bash", "-c" ]
和 doker 组成:
version: "3.7"
services:
example:
build:
context: .
volumes:
- reports:/home/reports
command: ["touch /home/reports/test.txt"]
volumes:
reports:
您的 docker 容器是 运行 根用户,因此以根用户身份创建文件。
您可以通过指定
来更改它
user: '1000:1000'
在您的 docker-compose 文件中为您服务。
原来是我想多了。要使上传工件正常工作,我需要做的就是先将文件从卷目录中复制出来。
在操作文件中,不要尝试修复权限,只需在组成容器后执行此操作:
- name: Copy out file from volume
run: |
sudo cp /var/lib/docker/volumes/example_reports/_data/test.txt /home/
- name: Upload test.txt
uses: actions/upload-artifact@v2
with:
name: test.txt
path: /home/test.txt
描述问题
我正在执行一项操作,从 docker 容器运行 API 测试,生成 report.html。此报告保存在 docker 卷中。 在该操作中,在创建报告后,我尝试在 report.html 上使用 actions/upload-artifact,使用指向它在主机卷中的位置的路径。
问题是当操作尝试执行此操作时我得到 Error: EACCES: permission denied, lstat /path/to/report.html
。
我试图通过在使用该操作之前执行 sudo chmod ugo+rwx /path/to/report.html
来解决此问题,但它没有任何改变。我认为 运行 使用 sudo 的操作会起作用,但似乎不受支持。
如何重现
重现一个类似的例子,我只是在卷中创建了一个 test.txt 文件。 github 操作如下所示:
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: Fix permissions
run: |
sudo chmod ugo+rwx /var/lib/docker/volumes/example_reports/_data/test.txt
- name: Upload test.txt
uses: actions/upload-artifact@v2
with:
name: test.txt
path: /var/lib/docker/volumes/example_reports/_data/test.txt
Dockerfile 很简单:
FROM ubuntu
ENTRYPOINT [ "/bin/bash", "-c" ]
和 doker 组成:
version: "3.7"
services:
example:
build:
context: .
volumes:
- reports:/home/reports
command: ["touch /home/reports/test.txt"]
volumes:
reports:
您的 docker 容器是 运行 根用户,因此以根用户身份创建文件。
您可以通过指定
来更改它 user: '1000:1000'
在您的 docker-compose 文件中为您服务。
原来是我想多了。要使上传工件正常工作,我需要做的就是先将文件从卷目录中复制出来。
在操作文件中,不要尝试修复权限,只需在组成容器后执行此操作:
- name: Copy out file from volume
run: |
sudo cp /var/lib/docker/volumes/example_reports/_data/test.txt /home/
- name: Upload test.txt
uses: actions/upload-artifact@v2
with:
name: test.txt
path: /home/test.txt