执行heroku container:push web推送Rasa应用至Heroku容器报错
报错原因
分两类问题,一类是命令执行时的直接报错,一类是配置文件里的隐藏问题,就算命令参数补全也会部署失败:
- 直接触发报错的原因:Heroku容器操作类命令必须通过
-a/--app参数指定要操作的目标应用名,你执行的push命令没带这个必填参数,所以直接返回参数缺失错误 - 配置文件隐藏问题1:Dockerfile中写了2条CMD指令,Docker镜像构建时只会执行最后一条CMD,最终只会启动action服务,Rasa主服务不会运行
- 配置文件隐藏问题2:两个启动脚本里的
cd app/路径错误,Dockerfile中是把代码拷贝到容器的/app绝对路径下,直接写相对路径cd app/会从容器默认工作目录(根目录)下找app子目录,路径不存在会直接启动失败 - 配置文件隐藏问题3:Heroku为每个dyno只分配一个对外暴露的
$PORT端口,你两个启动脚本都让服务绑定$PORT,同容器内两个进程抢同一个端口会直接崩溃 - 配置文件隐藏问题4:Dockerfile里
pip3 install --upgrade --no-cache pip3==20.2指令写错了包名,pip的包名是pip不是pip3,构建时会找不到对应包报错
修正方案
- 补全push命令参数,将命令中的
<你的Heroku应用名>替换为你在Heroku平台提前创建的应用实际名称:
sudo heroku container:push web -a <你的Heroku应用名>
镜像推送完成后,必须执行release命令才会正式部署到容器中:
sudo heroku container:release web -a <你的Heroku应用名>
注:如果普通用户权限能执行heroku命令,尽量不要加sudo,sudo会切换到root用户环境,可能导致你之前登录的Heroku凭证失效
- 修正Dockerfile配置,删除重复CMD、修正pip安装指令、设置工作目录避免路径错误,修正后内容如下:
FROM ubuntu:18.04 ENTRYPOINT [] RUN apt-get update && apt-get install -y python3.7 python3-pip RUN pip3 install --upgrade --no-cache pip==20.2 RUN python3 -m pip install --no-cache rasa==2.8.26 # 设置容器工作目录为/app,后续操作都在该目录下执行 WORKDIR /app ADD . /app/ RUN chmod +x /app/start_services.sh CMD /app/start_services.sh
原来的start_action_service.sh可以删除,不需要单独保留。
- 修正启动脚本
start_services.sh,将action服务放到后台绑定内部端口、Rasa主服务前台绑定Heroku分配的对外端口,同时配置主服务的action请求地址,修正后内容如下:
#!/bin/bash # 后台启动Action服务,绑定容器内部5055端口,不对外暴露 rasa run actions -p 5055 & # 前台启动Rasa主服务,绑定Heroku分配的对外端口,配置Action服务访问地址 rasa run --model models --enable-api --cors "*" --debug \ -p $PORT \ --actions-endpoint http://localhost:5055/webhook
注意事项
- 确保本地项目根目录下存在训练好的
models文件夹,且文件夹内有可用的Rasa模型文件,否则镜像构建时不会把模型拷入容器,启动时会提示找不到模型 - 确保执行命令时指定的应用名和你在Heroku后台创建的应用名完全一致,否则会提示找不到应用
- 如果部署后需要查看日志排查问题,可以执行
heroku logs --tail -a <你的Heroku应用名>查看实时运行日志
内容的提问来源于stack exchange,提问作者Veera Silamban
相关产品推荐
相关产品推荐

