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

如何解决docker-compose执行Python脚本时出现的Permission Errors错误

问题描述

我尝试使用docker-compose运行RL软件,已成功创建过基础docker容器、使用过docker-compose,但相关经验不算丰富。
按照对应仓库README的安装流程,我已成功构建了docker镜像,下一步需要执行Python脚本为容器安装额外组件,执行命令如下:

docker-compose exec app pip3 install -e ./environments/sushigo

执行bash ./scripts/install_env.sh sushigo时,我收到提示Defaulting to user installation because normal site-packages is not writeable,脚本继续运行几行后出现如下报错:

Installing collected packages: sushigo
  Running setup.py develop for sushigo
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/app/environments/sushigo/setup.py'"'"'; __file__='"'"'/app/environments/sushigo/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' develop --no-deps --user --prefix=
         cwd: /app/environments/sushigo/
    Complete output (4 lines):
    running develop
    running egg_info
    creating sushigo.egg-info
    error: could not create 'sushigo.egg-info': Permission denied
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python3 -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/app/environments/sushigo/setup.py'"'"'; __file__='"'"'/app/environments/sushigo/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' develop --no-deps --user --prefix= Check the logs for full command output.

我的docker-compose.yml配置如下:

services:
  app:
    build:
      context: ./
      dockerfile: app/Dockerfile
    ports:
      - 8899:8899
      - 6006:6006
    volumes:
      - ./app/:/app/
    tty: true
    container_name: selfplay
    cap_add:
      - SYS_PTRACE

我猜测是Python没有在容器内写入额外文件的权限,请问该如何避免该错误?

补充信息:

  • 我全程使用root用户操作
  • 运行环境为WSL2下的Ubuntu系统
解决方案

报错的核心原因是WSL2宿主机挂载到容器内的目录权限不匹配,本地./app目录的UID/GID和容器内执行pip命令的用户UID/GID不一致,导致容器内用户没有挂载目录的写入权限,无法创建安装需要的.egg-info目录。可通过以下任意一种方法解决:

  • 方法1:执行命令时指定root用户运行
    在原exec命令中添加--user root参数,直接用容器内root权限执行安装:
docker-compose exec --user root app pip3 install -e ./environments/sushigo

如果要执行安装脚本,可先进入root权限的容器终端再操作:

docker-compose exec --user root app bash
./scripts/install_env.sh sushigo
  • 方法2:修改docker-compose配置,指定容器默认以root运行
    在docker-compose.yml的app服务配置中新增user: root字段,修改后配置如下:
services:
  app:
    build:
      context: ./
      dockerfile: app/Dockerfile
    user: root # 新增本行配置
    ports:
      - 8899:8899
      - 6006:6006
    volumes:
      - ./app/:/app/
    tty: true
    container_name: selfplay
    cap_add:
      - SYS_PTRACE

修改完成后执行docker-compose up -d --force-recreate重启容器,再执行安装命令即可正常运行。

  • 方法3:修改宿主机挂载目录权限
    在WSL2的宿主机项目目录下执行命令放开目录写入权限:
chmod -R 777 ./app

该方法无需修改容器配置,操作最简单,但仅适合本地开发环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:30:05