Docker Compose运行Python代码时出现“No module named”依赖错误
问题解决步骤
核心原因分析
单独docker run正常但docker-compose报错,大概率是镜像版本不一致或本地挂载目录干扰Python模块搜索路径导致的。
1. 强制重新构建镜像(最常见解决方法)
你可能修改了Dockerfile添加依赖,但docker-compose默认复用旧镜像,导致依赖未安装。执行以下命令强制重新构建:
# 强制重新构建镜像,忽略缓存 docker-compose build --no-cache # 重新运行服务 COMMAND='python main.py "hostname" 10.0.0.1,10.0.0.2,192.168.0.5' docker-compose up
2. 检查本地挂载目录的干扰项
本地./code目录如果存在以下内容,会导致Python模块搜索路径异常:
- 与依赖包同名的文件(如
loguru.py) - 虚拟环境文件夹(如
venv) - 修改Python路径的
.pth文件
解决方法:
- 临时重命名本地
./code目录,重新运行docker-compose up验证是否恢复正常 - 删除目录内的干扰文件/文件夹
3. 验证镜像内依赖是否正确安装
运行临时容器检查镜像内的Python包:
# 构建并获取镜像ID,然后进入容器查看依赖列表 docker run --rm -it $(docker-compose build --quiet host_a) pip list
确认输出中包含loguru、psutil等所有需要的依赖包。
4. 优化Dockerfile(避免挂载目录干扰)
建议将代码直接复制到镜像中,而非通过volume挂载,保证镜像独立性:
FROM python:3.9-slim RUN apt-get update && apt-get install -y openssh-server RUN pip install \ cryptography \ bcrypt \ pynacl \ paramiko \ scp \ loguru \ pydantic \ psutil WORKDIR /code # 将本地code目录的文件复制到镜像内(根据实际路径调整) COPY ../code/ . CMD ["/usr/sbin/sshd", "-D", "-h", "/etc/ssh/key"]
修改后重新构建运行,无需挂载volume即可执行代码。
内容的提问来源于stack exchange,提问作者Nir
相关产品推荐
相关产品推荐

