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

Flask应用运行docker-compose时报canopen模块ModuleNotFoundError问题

问题排查与修复方案

核心问题原因

  1. Dockerfile依赖安装逻辑错误:没有安装requirements.txt中声明的全量依赖,安装顺序完全不符合最佳实践,多余的pip3 freeze >> requirements.txt还会污染本地的依赖声明
  2. docker-compose的bind mount配置覆盖了容器内的工作目录:如果本地环境未安装canopen,或者本地存在虚拟环境目录被挂载进容器,会导致镜像中安装的依赖包失效

具体修复步骤

1. 重写Dockerfile

正确的构建逻辑应该优先复制依赖声明文件安装依赖,利用Docker层缓存避免每次代码变更都重新安装依赖,移除冗余错误逻辑:

FROM python:3.9.1

# 提前安装后续需要的系统依赖(解决容器内无sudo、ifconfig等命令的问题)
RUN apt update && apt install -y --no-install-recommends sudo net-tools iproute2 \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /docker_endurance

# 先复制依赖声明,安装全量Python依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 最后复制业务代码
COPY . .

2. 新增.dockerignore文件

在项目根目录创建.dockerignore,避免本地虚拟环境、缓存文件被复制进镜像:

venv/
__pycache__/
*.pyc
.git/
.DS_Store

3. 调整docker-compose.yml

先注释掉volumes挂载配置,验证镜像本身的依赖安装是否正常:

version: "3.7"
services:
  app:
    build: .
    command: python main.py
    ports:
      - "5000:5000"
    privileged: true # 后续操作CAN设备需要特权权限
    # 调试通过后如果需要本地代码热更新再放开以下配置,需确保本地也安装了全量依赖
    # volumes:
    #   - .:/docker_endurance

验证方法

执行以下命令重新构建启动服务即可:

sudo docker-compose down -v
sudo docker-compose up --build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:27:03