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

GitHub Actions+Docker构建失败:OSError权限拒绝'/nonexistent'

Docker构建权限报错:Permission denied: '/nonexistent'

问题重现

  • GitHub Actions中Docker构建失败,pip安装requirements.txt阶段报错:
    ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: '/nonexistent'
    
  • 查看构建日志,RUN adduser --system nonroot步骤出现异常提示:
    #7 [2/7] RUN adduser --system nonroot
    #0 0.105 Adding system user `nonroot' (UID 100) ...
    #0 0.105 Adding new user `nonroot' (UID 100) with group `nogroup' ...
    #7 0.117 Not creating `/nonexistent'.
    #7 DONE 0.7s
    
    而此前成功的构建中,该步骤会正常创建/home/nonroot目录。

原因分析

近期python:3.10-slim官方镜像调整了系统用户创建的默认行为:

  • 旧版本镜像执行adduser --system nonroot时,会自动为系统用户生成/home/nonroot家目录
  • 新版本镜像中,--system参数默认不再创建家目录,且分配的UID为100;切换到nonroot用户后,指定的WORKDIR /home/nonroot不存在,pip安装时试图写入用户默认目录(系统 fallback 到/nonexistent),但该目录无写入权限,触发报错。

解决方法

修改Dockerfile中创建用户的步骤,显式指定家目录即可,以下是两种可行方案:

方案1:创建用户时直接指定家目录

修改后的Dockerfile:

FROM python:3.10-slim

# 显式指定家目录创建系统用户
RUN adduser --system --home /home/nonroot nonroot
USER nonroot

WORKDIR /home/nonroot
RUN mkdir app

COPY ./requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python3", "standings.py"]

方案2:手动创建家目录并设置权限

FROM python:3.10-slim

RUN adduser --system nonroot && mkdir -p /home/nonroot && chown nonroot:nogroup /home/nonroot
USER nonroot

WORKDIR /home/nonroot
RUN mkdir app

COPY ./requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python3", "standings.py"]

原理说明

通过显式创建/home/nonroot目录并确保归属nonroot用户,切换用户后WORKDIR路径合法,pip安装时能正常写入用户专属目录,避免权限错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:27:38