Docker Compose部署Rasa Action Server遇ModuleNotFound错误求助
问题排查与解决方案
核心原因
Rasa官方的rasa/rasa-sdk镜像仅预装了运行自定义动作所需的rasa-sdk包,不包含完整的Rasa框架。你本地运行时因为已经全局安装了Rasa所以正常,但容器环境默认缺少rasa模块,因此导入rasa.core.tracker_store.TrackerStore会触发ModuleNotFoundError。
具体解决步骤
1. 补全Docker镜像的Rasa依赖
修改你的Action Server Dockerfile,确保安装完整的Rasa包,且版本与你的Rasa服务一致:
FROM rasa/rasa-sdk:3.x.x # 替换为与Rasa服务匹配的版本号 # 复制依赖清单并安装 COPY requirements.txt /app/ RUN pip install --no-cache-dir -r requirements.txt # 复制动作代码 COPY actions /app/actions
同时在requirements.txt中明确指定Rasa版本:
rasa==3.x.x # 必须与本地及Rasa服务容器使用的版本完全一致 rasa-sdk==3.x.x
2. 验证版本兼容性
确保Rasa与Rasa-SDK的版本严格匹配(主版本、次版本、修订号都要一致),版本不兼容会导致模块导入或功能调用失败。可以通过本地命令rasa --version和rasa-sdk --version确认版本号。
3. 优化代码(可选)
如果你的代码仅使用TrackerStore的基础功能,可尝试替换为rasa-sdk提供的原生接口(比如rasa_sdk.tracker.Tracker),避免依赖完整的Rasa包,减少镜像体积和潜在的版本冲突。
4. 本地预构建镜像排查问题
先手动构建镜像并测试运行,提前发现依赖安装错误:
# 构建镜像 docker build -t my-action-server . # 运行容器查看日志 docker run --rm my-action-server
5. 检查Docker Compose挂载配置
确认docker-compose.yml中没有将本地目录挂载到容器的Python依赖目录(如/usr/local/lib/python3.x/site-packages),避免覆盖容器中已安装的Rasa包。
内容的提问来源于stack exchange,提问作者CFCIFE
相关产品推荐
相关产品推荐

