使用docker-compose在AWS ECS Fargate部署Xray边车容器出现多任务异常
问题根因
当使用Docker Compose向AWS ECS Fargate部署服务时,默认转换逻辑会将docker-compose.yml中每个顶级services下的服务识别为独立的ECS服务,各自生成独立的任务定义、调度独立的运行任务,因此会出现web业务服务和Xray守护进程分别运行在两个独立任务的情况。你之前使用CFN部署时是手动将两个容器定义配置在同一个任务定义中,因此符合边车部署的预期。
修复方案
在Xray服务的配置中添加ECS专属的边车声明标签,指定该服务为web服务的边车,不需要独立创建ECS服务。修改后的配置参考如下:
version: "3.9" services: web: image: link-to-private-repo/web ports: ["80:80"] xray: image: amazon/aws-xray-daemon # 声明当前服务为web的边车,会和web放到同一个任务定义中 x-aws-sidecar-for: web # Fargate同任务内容器共享网络栈,无需对外暴露端口,仅保留同任务内的端口访问即可 expose: - "2000/udp"
补充说明
- 同一个Fargate任务内的容器共享网络命名空间,web服务可以直接通过
127.0.0.1:2000/udp向Xray守护进程上报数据,无需额外配置服务发现 - 修改配置后重新执行部署命令,ECS会自动将两个容器合并到同一个任务定义中,调度时也会同时启动两个容器在同一个Fargate实例上
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

