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

如何为Docker Compose传环境变量并动态设置Rasa模型参数?

解决方案

要实现每次Docker重启时动态从GCS获取最新模型文件作为--model参数,需要调整三个文件的配置,具体步骤如下:

1. 修改Dockerfile,指定入口脚本

原来的Dockerfile未设置ENTRYPOINT,需要添加ENTRYPOINT指向你的entrypoint.sh,让它作为容器启动的入口,负责处理参数替换后再执行Rasa命令。

修改后的Dockerfile:

FROM rasa/rasa:3.1.0-full

ADD . /app

RUN whoami

USER root

RUN pip install google-cloud-storage
# 给entrypoint.sh添加执行权限
RUN chmod +x /app/entrypoint.sh

USER rasa

# 设置entrypoint脚本,CMD作为默认参数传递给entrypoint
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["rasa", "run", "--enable-API", "--auth-token", "secret", "--model", "abc.gz"]

2. 修改entrypoint.sh,动态替换--model参数

在entrypoint.sh里获取到FILE_NAME后,遍历传入的命令参数,把原来的--model后面的值替换成最新的FILE_NAME,再执行修改后的命令。

修改后的entrypoint.sh:

#!/bin/sh
# 使用环境变量替代硬编码,更灵活
BUCKET_NAME=${BUCKET_NAME:-gs://customer-service-rasa-models-staging}
PROJECT_NAME=${PROJECT_NAME:-intelagent-dev}
KEY_FILE=${KEY_FILE:-./dev.json}

# LOGIN TO GCLOUD
gcloud auth activate-service-account --project=$PROJECT_NAME --key-file=$KEY_FILE

# 获取最新的模型文件名
FILE_NAME=$(gsutil ls -l $BUCKET_NAME | sort -k2 | tail -n2 | head -n1 | awk 'END {$1=$2=""; sub(/^[ \t]+/, ""); print }')
echo "使用最新模型文件: $FILE_NAME"

# 遍历传入的参数,替换--model的值
NEW_ARGS=()
MODEL_FLAG=false
for arg in "$@"; do
    if [ "$MODEL_FLAG" = true ]; then
        # 替换为获取到的FILE_NAME
        NEW_ARGS+=("$FILE_NAME")
        MODEL_FLAG=false
    elif [ "$arg" = "--model" ]; then
        NEW_ARGS+=("$arg")
        MODEL_FLAG=true
    else
        NEW_ARGS+=("$arg")
    fi
done

# 执行修改后的命令
exec "${NEW_ARGS[@]}"

这里做了两个优化:

  • 用环境变量替代硬编码配置,和docker-compose里的环境变量对应,方便后续修改
  • 自动识别--model参数并替换其值,不需要修改原命令结构

3. 调整docker-compose.yml配置

保留原有command配置即可(entrypoint会自动替换--model的值),同时确保环境变量和entrypoint.sh里的变量对应:

修改后的docker-compose.yml:

version: '3.0'
services:
  rasa:
    image: himanshu/rasa:dev
    ports:
      - 5005:5005
    volumes:
      - ./:/app
    # 保留默认命令,entrypoint会替换--model的值
    command: ["rasa", "run", "--enable-API", "--auth-token", "secret", "--model", "abc.gz"]
    environment:
      - GOOGLE_APPLICATION_CREDENTIALS=/app/dev.json
      - BUCKET_NAME=customer-service-rasa-models
      - PROJECT_NAME=intelagent-dev
      - KEY_FILE=/app/dev.json

验证步骤

  1. 重新构建镜像:docker-compose build
  2. 启动容器:docker-compose up
  3. 查看容器日志,会看到输出使用最新模型文件: [你的GCS里的最新模型名],同时Rasa服务会加载这个最新模型

这样每次容器重启时,entrypoint.sh都会重新从GCS获取最新的模型文件名,自动替换--model参数的值,无需手动修改配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:15:42