90%的路径问题源于工作目录、挂载路径与模块搜索顺序未对齐:-v映射时宿主机路径不存在会导致Docker静默创建空目录;须用绝对路径映射、映射前确认文件存在、进容器先ls验证;ModuleNotFoundError根因是CWD与sys.path[0]不匹配,应改用python -m方式启动并显式指定-w工作目录。

直接结论:90%的路径问题不是代码写错,而是容器启动时工作目录、挂载路径、模块搜索顺序三者没对齐。
docker run -v 映射后脚本文件变成空目录
这是最隐蔽也最容易复现的问题。当你写 docker run -v ./scripts:/app/scripts,而宿主机当前目录下根本不存在 ./scripts 这个路径,Docker 会静默创建一个空目录挂进去——容器里 /app/scripts 看起来存在,但里面什么都没有。
- 运行前必须确认宿主机路径真实存在且含目标文件:
ls -l ./scripts/test.py - 一律用绝对路径映射:
-v $(pwd)/scripts:/app/scripts或-v /home/user/project/scripts:/app/scripts - 进容器第一件事不是跑脚本,是
ls -l /app/scripts/验证内容是否真实挂载进来
ModuleNotFoundError: No module named 'src' 的真实原因
错误提示指向模块名,但根源在 Python 启动时的当前工作目录(CWD)和 sys.path[0]。比如你执行 python scripts/run.py,Python 会把 scripts/ 所在父目录(即 sys.path[0])加入搜索路径——如果这个父目录不是项目根目录,import src 就必然失败。
调用 Cutout.Pro 视觉处理 API 进行背景移除、人像抠图和照片增强,支持文件上传与图片 URL 输入。
- 不要依赖隐式 CWD,改用
-m方式启动:python -m pytest tests/(前提是tests/在当前目录或PYTHONPATH中) - 强制指定容器内工作目录:
docker run -w /app python scripts/run.py - 避免滥用
ENV PYTHONPATH=/app——它会被sys.path[0](脚本所在目录)覆盖,无效
PermissionError: [Errno 1] Operation not permitted 与 conda 环境
这个报错常出现在启动 Flask/Django 时,表面是权限问题,实则是 glibc 2.34+ 和旧版 Docker 的 clone() 系统调用不兼容。尤其当你看到错误路径含 /opt/conda/bin/python,基本可以锁定是 conda 环境触发的底层冲突。
立即学习“Python免费学习笔记(深入)”;
- 优先换基础镜像:用
continuumio/miniconda3:23.5.0或更老稳定版,避开 Ubuntu 22.04+/Debian 12 + Docker 20.x 组合 - 若必须用新系统,加
--security-opt seccomp=unconfined启动容器(仅限测试环境) - 检查
pip list是否混装了不同 Python 版本的包(如 PyRadiomics 在 Python 3.11 下因SafeConfigParser移除而崩溃)
真正卡住人的从来不是单个错误,而是多个路径层叠失效:挂载路径为空 → 脚本执行失败 → 工作目录错位 → sys.path 错乱 → import 失败 → 再加一层 conda 权限限制。每层都得单独验证,不能靠猜。

















