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

如何在GitHub Workflows中用Docker构建ArchLinux包并解决权限问题

GitHub Actions中Docker容器挂载目录的权限问题解决方法

问题背景

本地环境下使用Docker构建ArchLinux包完全正常,但迁移到GitHub Workflows后,容器内的build用户无法写入挂载的/app目录,出现以下报错:

CMake Error: Unable to (re)create the private pkgRedirects directory:
/app/CMakeFiles/pkgRedirects
Error: could not load cache
==> ERROR: You do not have write permission for the directory $BUILDDIR (/app).
Aborting...

甚至执行touch test这类简单命令也因权限失败。

问题原因

GitHub Actions的Ubuntu Runner环境中,仓库目录的所有者UID为1001,而Docker容器内默认创建的build用户UID是随机分配的(通常不是1001),导致挂载目录后,容器内用户与目录所有者UID不匹配,无写入权限。本地环境中你的用户UID恰好与容器内build用户一致,所以未触发权限问题。

解决方法

方法一:Dockerfile中指定匹配Runner的UID/GID

直接在创建build用户时指定UID为1001(GitHub Actions Ubuntu Runner的默认用户UID),让容器内用户与宿主目录所有者权限匹配:

FROM archlinux:latest
RUN pacman -Syu make cmake gcc base-devel --noconfirm
# 指定UID=1001,匹配GitHub Actions Runner用户
RUN useradd -u 1001 build

修改后重新构建镜像,GitHub Workflows中的原有运行命令无需改动即可正常执行。

方法二:启动容器时先调整挂载目录权限

在运行构建容器前,先以root身份进入容器,将/app目录的所有者改为build用户:

name: archlinux build
on: [push]
jobs:
  build:
    runs-on: ubuntu-18.04
    steps:
    - uses: actions/checkout@v3
    - name: Build
      run: |
        docker build -t build .
        # 先以root身份修改目录权限
        docker run -v "$PWD":/app --user root build chown -R build:build /app
        # 再用build用户执行构建
        docker run -v "$PWD":/app --user build -w "/app" build ./build.sh

方法三:给build用户添加sudo权限(不推荐)

如果临时需要快速解决,可在Dockerfile中给build用户添加无密码sudo权限,然后在构建脚本开头调整目录权限:

  1. 修改Dockerfile:
FROM archlinux:latest
RUN pacman -Syu make cmake gcc base-devel sudo --noconfirm
RUN useradd build
# 给build用户添加无密码sudo权限
RUN echo "build ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
  1. 修改build.sh脚本:
# 先调整当前目录权限
sudo chown -R $USER:$USER .
cmake CMakeLists.txt
cmake --build .
makepkg

此方法存在安全风险,仅建议临时应急使用。

推荐方案

优先选择方法一,配置简洁且无额外运行步骤;若无法修改Dockerfile,可使用方法二,通过额外的容器命令调整权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:05:26