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

Windows WSL2下Docker运行Python报Errno 13权限拒绝错误如何解决?

WSL2 环境Docker容器PermissionError解决方案

问题根因

该报错为WSL2环境Docker挂载的特有问题:镜像构建阶段设置的/code目录权限,会被WSL2的挂载逻辑覆盖。如果你的项目目录存放在Windows NTFS分区,通过Docker Desktop WSL集成挂载到容器内时,目录默认所有者为root,且会忽略镜像内置的权限配置,导致容器内运行的apache用户无写入权限。

解决方案

方案1:修正用户映射(最常用)

  • 先查询容器内apache用户的UID和GID:
    执行docker run --rm <你的镜像名称> id apache,记录输出的uid和gid值,默认apache的uid/gid为33:33
  • 修改docker-compose.yml对应服务配置,指定容器运行用户:
    services:
      web: # 替换为你实际的服务名
        user: "33:33" # 替换为你查询到的apache用户uid:gid
    
  • 若项目仍存放在Windows分区,在WSL2终端编辑/etc/wsl.conf添加如下配置:
    [automount]
    options = "metadata,umask=0022"
    mountFsTab = false
    
    保存后在Windows终端执行wsl --shutdown重启WSL2生效。

方案2:启动时强制修正权限

无需修改WSL2全局配置,直接在容器启动时添加权限赋值步骤,修改docker-compose.yml的command配置:

services:
  web: # 替换为你实际的服务名
    command: /bin/sh -c "chown -R apache:apache /code && <你原来的启动命令,比如apache2-foreground>"

仅首次启动会执行全目录权限修改,后续启动无额外耗时

方案3:使用WSL2原生文件系统

将项目代码迁移到WSL2的EXT4路径下(例如/home/<你的WSL用户名>/project),直接在WSL2终端执行docker-compose up启动服务。WSL2原生路径的权限逻辑和Linux一致,不会覆盖镜像构建阶段设置的目录权限。

生效验证

修改配置后执行docker-compose down -v删除历史挂载卷,再重新启动服务即可验证权限问题是否解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:18:03