Docker运行Python2.7脚本时无法访问同目录utils模块求助
问题原因与解决方案
核心错误
- 未复制
utils目录到容器:你的Dockerfile只拷贝了test_server.py,但脚本依赖的utils文件夹并没有同步到容器工作目录,导致Python无法找到该模块。 - 工作路径写法错误:
python:2.7镜像基于Linux系统,你使用了Windows风格的路径C:\something\something\print,这在Linux容器中完全无效,会导致工作目录设置异常。
修正步骤
1. 修正工作目录路径
将WORKDIR改为Linux风格的路径,比如:
WORKDIR /app/print
2. 复制utils目录到容器
在COPY test_server.py ./的位置,添加复制utils目录的命令:
COPY utils/ ./utils/
如果本地项目根目录只有test_server.py和utils文件夹,也可以直接复制整个目录内容(建议配合.dockerignore文件排除日志、缓存等无关文件):
COPY . .
3. 确保utils是合法Python模块
在本地的utils文件夹中添加一个空的__init__.py文件——Python 2.7要求必须有这个文件,才能将文件夹识别为可导入的模块。
4. 优化Dockerfile(可选但推荐)
合并RUN命令减少镜像层数,同时清理临时缓存减小镜像体积:
FROM python:2.7 WORKDIR /app/print # 合并apt-get安装命令并清理缓存 RUN apt-get update && apt-get install -y \ python-cairo \ python-gi \ python-gi-cairo \ gir1.2-gtk-3.0 \ mapnik-utils \ && rm -rf /var/lib/apt/lists/* # 合并pip安装命令 RUN pip install bs4 image mapnik numpy psycopg2 # 复制项目所有文件 COPY . . CMD [ "python", "./test_server.py"]
验证方法
重新构建镜像并运行容器,此时容器工作目录下会同时存在test_server.py和utils文件夹,Python就能正常导入模块了。
内容的提问来源于stack exchange,提问作者LennardDerudder
相关产品推荐
相关产品推荐

