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

docker compose部署AWS ECS应用如何获取固定公网访问URL

解决方案

你不需要每次部署更新都手动修改DNS记录,也不需要将域名迁移至Route53。核心问题是默认docker compose的ECS集成逻辑会在每次全新部署时重建包括应用负载均衡(ALB)在内的全栈资源,才会导致访问域名每次变化。通过以下配置即可实现一次DNS配置、后续部署永久复用固定公网访问入口:

方案1:复用固定ALB(最稳定,推荐)

该方案100%避免负载均衡器被替换,仅需一次前置配置:

  • 首次操作时登录AWS控制台,在你部署应用的对应区域手动创建1个Application Load Balancer:
    • 配置80端口监听器,创建空的默认目标组即可
    • 选择公网访问模式,创建完成后该ALB会分配一个永久不变的公网域名,不会随后续应用更新改变
  • 修改你的docker-compose.yml文件,添加顶层扩展字段指定复用该固定ALB,示例配置如下:
# 替换为你手动创建的固定ALB对应的ARN
x-aws-loadbalancer: "arn:aws:elasticloadbalancing:us-east-2:你的账号ID:loadbalancer/app/你创建的ALB名称/ALB资源ID"
services:
  flask:
    # 保留你原有的Flask服务配置,无需修改
    build: ./flask
  nginx:
    # 保留你原有的Nginx服务配置,端口映射保持原有规则即可
    build: ./nginx
    ports:
      - "80:80"
    depends_on:
      - flask
  • 后续所有应用更新,正常执行docker context use myecscontext和docker compose up即可,部署逻辑会自动将新版本Fargate任务挂载到这个固定ALB下,不会创建新的负载均衡器。
  • 你仅需要在当前域名注册商的DNS管理后台,添加1条CNAME记录将my-fancy-domain.com指向该固定ALB的公网域名即可,配置一次后永久生效,后续代码更新、重新部署都不需要再修改DNS记录。

方案2:固定Compose项目名(零AWS控制台操作)

如果你不想手动在AWS控制台提前创建ALB,可以通过固定Compose项目名的方式,避免部署时删除重建全栈资源:

  • 后续执行部署命令时固定项目名称,不要使用随机生成的项目名:
docker compose --project-name my-fancy-app up
  • 固定项目名后,docker compose会对已有CloudFormation栈执行更新操作,而非删除旧栈重建新栈,只要你不修改端口映射、负载均衡相关的配置,原有ALB就会被保留,域名不会变化。
  • 注意:该方案在你修改服务端口、调整负载均衡规则时仍可能触发ALB重建,稳定性不如方案1。
常见误区澄清
  • Fargate任务不需要绑定弹性IP:公网流量通过固定ALB接入即可,ALB本身的高可用入口地址是永久固定的,不需要额外绑定弹性IP。
  • 不需要将域名迁移至Route53:任何注册商管理的域名都支持配置CNAME记录指向AWS ALB的公网域名,解析生效逻辑和使用Route53没有区别。
  • 部署更新不会影响访问:使用固定ALB后,应用新版本部署时ALB会自动完成流量切换,不会出现访问中断。

内容的提问来源于stack exchange,提问作者Timothy W. Hilton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:06:42