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

使用Docker Compose ECS插件部署AWS ECS遇网络与容器不稳定问题

问题:Docker Compose ECS插件部署后FastAPI无法连接GROBID且容器频繁重启

我正按照AWS相关教程,使用Docker Compose的ECS插件将以下服务部署至AWS:

  • 运行在Uvicorn服务器上的FastAPI服务
  • GROBID服务器

唯一的特殊配置是共享EFS文件系统,GROBID将PDF转换为XML后存储到该系统,FastAPI通过HTTP调用时需要访问这些文件。

我的docker-compose配置如下:

version: "3"
services:
  fastapi:
    image: <account>.dkr.ecr.eu-central-1.amazonaws.com/repo:latest # fastapi+uvicorn image
    ports:
      - "8000:8000"
    volumes:
      - efs:/root
    networks:
      - backend

  grobid:
    image: grobid/grobid:0.6.2
    ports:
      - "8070:8070"
    networks:
      - backend

networks:
  backend:
    driver: bridge

volumes:
  efs:
    driver_opts:
      # Filesystem configuration
      backup_policy: ENABLED
      lifecycle_policy: AFTER_14_DAYS
      throughput_mode: bursting

当前问题

  1. FastAPI无法连接GROBID,报错信息:
HTTPConnectionPool(host='127.0.0.1', port=8070): Max retries exceeded with url: /api/processFulltextDocument (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f11e1a777c0>: Failed to establish a new connection: [Errno 111] Connection refused'))

但该端点可通过浏览器正常访问。
2. 两个容器频繁重启,怀疑容器不稳定或ECS插件配置有问题。


排查思路

  • 修正容器间访问地址:报错显示FastAPI用127.0.0.1访问GROBID,但在ECS的Docker Compose网络中,容器间需通过服务名通信,应将请求地址改为http://grobid:8070/api/processFulltextDocument,而非本地回环地址。
  • 调整容器启动顺序与健康检查:FastAPI可能在GROBID完全就绪前发起请求,导致连接失败。可给fastapi服务添加depends_on依赖,并为GROBID配置健康检查,确保服务就绪后再启动FastAPI:
    grobid:
      image: grobid/grobid:0.6.2
      ports:
        - "8070:8070"
      networks:
        - backend
      healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:8070/api/isalive"]
        interval: 30s
        timeout: 10s
        retries: 3
    
    fastapi:
      # ... 其他配置
      depends_on:
        grobid:
          condition: service_healthy
    
  • 检查EFS挂载状态:查看容器日志中是否有EFS挂载失败、权限不足的报错。确认EFS挂载目标已在对应可用区创建,且容器对挂载路径有读写权限。
  • 升级ECS资源配额:默认CPU/内存可能不足以支撑服务运行,导致容器被OOM Killer终止重启。可添加资源限制配置:
    services:
      fastapi:
        # ... 其他配置
        deploy:
          resources:
            limits:
              cpus: '1.0'
              memory: 1024M
            reservations:
              cpus: '0.5'
              memory: 512M
      grobid:
        # ... 其他配置
        deploy:
          resources:
            limits:
              cpus: '2.0'
              memory: 2048M
            reservations:
              cpus: '1.0'
              memory: 1024M
    
  • 排查GROBID版本稳定性:尝试升级GROBID至较新版本(如0.7.3),查看是否存在旧版本的已知启动或运行问题。

百万级用户无停机共享存储部署建议

  • ECS服务高可用配置:将FastAPI和GROBID均配置为ECS服务,每个服务至少部署2个任务实例,启用基于CPU/内存或请求数的自动扩缩容,应对流量波动。
  • 负载均衡架构:FastAPI服务前端配置Application Load Balancer(ALB),对外提供统一访问入口,配置健康检查自动剔除不健康实例;GROBID服务使用内部ALB或ECS服务发现,让FastAPI通过内部负载均衡访问,避免单点故障。
  • EFS性能与可用性优化:根据业务场景选择EFS性能模式(高并发场景选“最大IO”模式),若吞吐量需求稳定,切换为“预置吞吐量”模式;在多个可用区创建EFS挂载目标,确保存储服务跨可用区高可用。
  • 无停机部署策略:采用ECS滚动更新或蓝绿部署策略,配置合理的最小健康百分比(如100%)和最大百分比(如200%),逐步替换旧实例,实现零停机发布。
  • 监控与告警:通过CloudWatch监控容器CPU、内存、网络指标及EFS吞吐量、延迟,设置告警规则,当容器重启次数异常、资源使用率过高时及时预警。

内容的提问来源于stack exchange,提问作者Alex Ramalho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:00:56