如何在Heroku上运行带环境变量参数的Docker镜像
Heroku 运行 Docker Hub 镜像并传入启动参数、环境变量的方法
Heroku 没有直接提供类似 docker run 后跟自定义参数的部署命令,你可以通过以下两种方案实现需求:
方案1:修改镜像启动入口(适配性最高)
- 本地拉取目标镜像后,新建一个
Dockerfile基于原镜像修改启动逻辑,示例如下:
# 替换为你实际使用的镜像名 FROM user/image # 新增自定义启动脚本 RUN <<EOF #!/bin/sh echo '#!/bin/sh' > /app/start.sh # 这里写你需要的启动命令,原入口路径可以通过 docker inspect 原镜像查询 Entrypoint 字段得到 echo 'exec /usr/bin/原镜像默认入口程序 -someoption $SOME_ENV_VAR' >> /app/start.sh chmod +x /app/start.sh EOF ENTRYPOINT ["/app/start.sh"]
- 构建镜像后推送到 Heroku 容器 Registry 完成部署即可。需要修改环境变量时直接通过 Heroku CLI 操作:
# 替换为你的应用名和对应变量值 heroku config:set SOME_ENV_VAR=xxx -a your-app-name
所有通过 heroku config 设置的变量会自动注入容器运行环境,直接在启动命令中通过 $变量名 调用即可。
方案2:通过 Procfile 覆盖启动命令(无需修改镜像)
如果不想改动原镜像,可以在部署目录下新建 Procfile 文件,直接指定完整启动命令,Heroku 会自动用该命令覆盖镜像默认的 Entrypoint:
# web 对应 web 进程类型,如果是后台任务可替换为 worker web: /usr/bin/原镜像默认入口程序 -someoption $SOME_ENV_VAR
部署前先将应用栈设置为容器模式:
heroku stack:set container -a your-app-name
再正常推送代码部署即可。
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

