如何将docker-compose.yml转换为heroku.yml以在Heroku独立dyno运行容器
Heroku多容器部署方案
- 你当前的多独立容器部署场景,应使用
heroku.yml,不需要再沿用之前单项目的Procfile方案
Procfile仅适用于Buildpack构建的非容器化部署、或者单容器镜像的进程声明,无法支持多Dockerfile分别构建不同服务镜像的需求,heroku.yml是Heroku官方针对多容器部署场景推出的原生配置方案。 - 你可以直接基于现有docker-compose.yml改写得到heroku.yml,参考配置如下:
注意:Heroku会为每个dyno自动分配端口,不需要在配置中写端口映射,所有服务需要监听0.0.0.0:$PORT,不要硬编码固定端口。
build: docker: # 依次声明每个服务对应的Dockerfile路径 frontend: ./Docker/Dockerfile.frontend notification: ./Docker/Dockerfile.notification user: ./Docker/Dockerfile.user stripe: ./Docker/Dockerfile.stripe run: # 每个服务对应启动命令,替换为你实际的Gunicorn启动参数 frontend: gunicorn <你的前端入口模块>:<app实例名> --bind 0.0.0.0:$PORT notification: gunicorn <你的通知服务入口模块>:<app实例名> --bind 0.0.0.0:$PORT user: gunicorn <你的用户服务入口模块>:<app实例名> --bind 0.0.0.0:$PORT stripe: gunicorn <你的stripe服务入口模块>:<app实例名> --bind 0.0.0.0:$PORT
- 部署完成后操作
Heroku默认只会启动web类型的dyno,其他类型的dyno需要你手动扩容启动,可通过Heroku控制台操作,也可以执行命令heroku ps:scale notification=1 user=1 stripe=1按需调整每个服务的dyno数量和规格。 - 额外注意事项
普通层级的Heroku dyno没有内部私有网络,服务之间互相调用需要使用对应的公网域名,不要尝试用内部端口直接访问。
内容的提问来源于stack exchange,提问作者DidSquids
相关产品推荐
相关产品推荐

