树莓派环境下Docker构建Python镜像时安装PyYAML报错求助
问题根因
这个报错是Raspbian 10(buster)ARM架构环境下Docker默认安全策略限制导致的:pip解压PyYAML 5.4.1源码包时需要修改文件的修改时间(mtime),而树莓派Docker的默认seccomp规则拦截了utime系统调用,触发权限不足报错。x86架构的Windows、Ubuntu环境下安全策略限制更宽松,因此可以正常构建。
解决方案
按生效优先级从高到低排列:
- 方案1(修改Dockerfile,无额外操作成本)
在pip install命令后添加--no-use-pep517参数,禁用PEP517构建流程,跳过修改mtime的步骤,修改后的Dockerfile对应行如下:
RUN pip install --no-use-pep517 -r requirements.txt
- 方案2(预安装系统依赖,跳过源码编译)
先通过apt安装PyYAML的预编译二进制包,再安装requirements依赖,修改Dockerfile:
FROM python:3 WORKDIR /usr/src/wakeonlan COPY . . RUN pip install --no-cache-dir --upgrade pip # 安装PyYAML系统依赖,避免源码编译解压报错 RUN apt update && apt install -y --no-install-recommends python3-yaml libyaml-dev && rm -rf /var/lib/apt/lists/* # 安装依赖 RUN pip install -r requirements.txt
- 方案3(调整Docker构建参数)
执行docker build时添加安全参数关闭seccomp限制:docker build --security-opt seccomp=unconfined . - 方案4(更换基础镜像)
将基础镜像从python:3更换为兼容性更好的slim版本,减少冗余组件带来的兼容性问题:
FROM python:3-slim
内容的提问来源于stack exchange,提问作者Infaninio
相关产品推荐
相关产品推荐

