VSCode构建Docker镜像安装pip时python3-minimal报PermissionError问题
问题复现环境
- 系统镜像:Ubuntu 20.04(内置python3.8-minimal)、Ubuntu 22.04(内置python3.10-minimal)官方Docker镜像
- 构建环境:VSCode内置Docker构建流程
- 复现特征:特定设备上100%复现,其他设备无同类报错
问题触发场景与核心报错
执行apt install pip命令安装pip时流程中断,错误触发点在python3.*-minimal包的配置阶段:py_compile编译字节码写入/usr/lib/python3.*/__pycache__/路径时抛出权限拒绝错误,dpkg子进程返回错误码1终止安装。
核心报错日志片段:
#0 136.7 PermissionError: [Errno 13] Permission denied: '/usr/lib/python3.8/__pycache__/__future__.cpython-38.pyc.140212054232736' #0 136.7 dpkg: error processing package python3.8-minimal (--configure): #0 136.7 installed python3.8-minimal package post-installation script subprocess returned error exit status 1
报错同时伴随两类非阻断提示:perl locale设置失败警告、debconf提示apt-utils未安装,与核心报错无直接关联。
已完成排查操作
- 启动空白Ubuntu容器后,在容器内手动执行
sudo apt install pip、sudo apt install python3-pip,仍然触发完全相同的权限报错 - 用最简Dockerfile可稳定复现问题,Dockerfile内容如下:
FROM ubuntu:20.04 RUN apt update -y && apt upgrade -y RUN apt install pip -y
根因分析
该问题属于宿主机侧Docker配置/安全策略拦截导致的权限异常,与镜像本身、apt源、Python包逻辑无关:
- 出问题的设备大概率开启了Docker用户命名空间隔离(userns-remap),或者安装了终端安全管理、强制访问控制类第三方软件,拦截了容器内root用户对系统级Python库目录的临时文件写入操作
- py_compile生成字节码时会先创建随机后缀的临时文件,写入完成后再原子替换为正式pyc文件,这个临时文件创建/写入动作被宿主机侧策略拦截时,就会抛出PermissionError
- 其他设备无法复现的核心原因是这些设备默认未开启userns-remap,也没有对应安全策略拦截容器内的文件写入动作。
可行解决方案
按优先级从高到低尝试:
- 调整Dockerfile逻辑,提前创建缓存目录并设置权限,用非交互模式安装正确的pip包,修改后参考配置如下:
注意:Ubuntu 22.04对应缓存路径为FROM ubuntu:20.04 RUN apt update -y && apt upgrade -y # 提前创建pyc缓存目录并设置权限,避免临时文件写入被拦截 RUN mkdir -p /usr/lib/python3.8/__pycache__ && chmod 777 /usr/lib/python3.8/__pycache__ # 非交互模式安装,跳过无关的debconf交互提示 RUN DEBIAN_FRONTEND=noninteractive apt install -y python3-pip/usr/lib/python3.10/__pycache__,按系统版本替换即可 - 检查Docker配置文件
/etc/docker/daemon.json,临时删除"userns-remap": "default"配置项,执行systemctl restart docker重启服务后重新尝试构建 - 检查宿主机安装的终端安全、杀毒类软件,将Docker镜像构建缓存目录、容器运行目录加入白名单,避免拦截临时文件写入操作
- 避免直接执行
apt install pip,Ubuntu官方源中pip的正确包名为python3-pip,直接安装pip会引入额外过渡依赖包,拉长构建流程也更容易触发异常。
内容的提问来源于stack exchange,提问作者samd
相关产品推荐
相关产品推荐

