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
相关产品推荐
相关产品推荐

