执行docker-compose up时遇权限错误:无法打开manage.py
解决Docker Compose启动时
python: can't open file 'manage.py': [Errno 1] Operation not permitted错误 可能的原因与修复方案
1. 指定容器工作目录
你的docker-compose.yml未设置容器工作目录,执行命令时默认在容器根目录(/)查找文件,但代码挂载到了/code目录。可通过两种方式修正:
- 在
beanstalk-django服务中添加工作目录配置:
beanstalk-django: build: . command: bash -c "python manage.py migrate api && python manage.py runserver 0.0.0.0:8000" working_dir: /code # 新增该行 ports: - "80:8000" env_file: - .env depends_on: gpsdataviz-db: condition: service_healthy links: - "gpsdataviz-db" environment: - USER=${USER} volumes: - type: bind source: ./ target: /code
- 或者修改命令,先切换到
/code目录:
command: bash -c "cd /code && python manage.py migrate api && python manage.py runserver 0.0.0.0:8000"
2. 检查本地文件与目录权限
- 确认本地当前目录下存在
manage.py,且具备可读权限:
在本地终端执行:
确保权限包含ls -la manage.pyr(如-rw-r--r--)。 - 若项目位于MacOS受保护路径(如
/System、/Library),将项目移至/Users目录下——该路径不受系统完整性保护(SIP)限制,绑定挂载权限更宽松。
3. 调整容器运行用户权限
若容器默认普通用户无挂载目录访问权限,可临时以root用户运行(仅调试用,生产环境不建议):
在beanstalk-django服务中添加:
user: "root"
或在Dockerfile中配置合适用户并赋予目录权限:
RUN useradd -m appuser WORKDIR /code RUN chown -R appuser:appuser /code USER appuser
4. 重置Docker Desktop文件共享设置
即使已修改过权限,仍建议:
- 打开Docker Desktop偏好设置 → 资源 → 文件共享
- 确认项目所在父目录已加入共享列表
- 点击"Apply & Restart"重启Docker Desktop
5. 排查Dockerfile构建逻辑
若Dockerfile已将代码复制到容器内,绑定挂载的本地目录会覆盖容器内的/code。可临时注释volumes配置,测试容器能否正常启动:
# volumes: # - type: bind # source: ./ # target: /code
若能启动,说明问题出在本地目录的挂载权限上,再针对性调整。
内容的提问来源于stack exchange,提问作者Hassan Raza
相关产品推荐
相关产品推荐

