You need to enable JavaScript to run this app. 如何在Docker Swarm中部署aws-xray-daemon并解决区域获取报错?
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker Swarm中部署aws-xray-daemon并解决区域获取报错?

X-Ray Daemon 部署到Docker Swarm的配置问题

尝试将amazon/aws-xray-daemon部署到Docker Swarm集群时,参考项目公开文档未找到足够的可配置项说明,初始使用的部署配置如下:

services:
  xrayd:
    image: amazon/aws-xray-daemon
    deploy:
      restart_policy:
        delay: 2m

服务启动后,日志持续输出以下错误内容:

2021-02-27T04:50:38Z [Info] Initializing AWS X-Ray daemon 3.2.0
2021-02-27T04:50:38Z [Info] Using buffer memory limit of 78 MB
2021-02-27T04:50:38Z [Info] 1248 segment buffers allocated
2021-02-27T04:50:39Z [Error] Unable to retrieve the region from the EC2 instance EC2MetadataRequestError: failed to get EC2 instance identity document
caused by: RequestError: send request failed
caused by: Get http://169.254.169.254/latest/dynamic/instance-identity/document: dial tcp 169.254.169.254:80: connect: network is unreachable
2021-02-27T04:50:39Z [Error] Cannot fetch region variable from config file, environment variables and ec2 metadata.

针对对应EC2实例已经配置了包含完整xray:*操作权限的IAM策略,上述报错依然没有消失。

问题根因

X-Ray Daemon获取AWS区域的逻辑是按优先级依次尝试:先读取本地配置文件中的区域设置,再读取进程环境变量中的区域参数,最后才会尝试请求EC2实例元数据服务(固定访问地址169.254.169.254)拉取实例所属区域。
日志中明确提示connect: network is unreachable,说明容器网络层面根本无法连通这个元数据地址,流程在拉取区域的环节就中断了,还没进入到校验IAM权限的步骤,之前配置的IAM权限完全没有被调用,和IAM权限设置无关。

修复操作

  • 最快的修复方式是跳过元数据拉取环节,给服务显式指定所在的AWS区域。在部署配置的服务定义块下增加环境变量配置,将AWS_REGION设置为集群实际部署的AWS区域即可,调整后的配置参考:
services:
  xrayd:
    image: amazon/aws-xray-daemon
    environment:
      - AWS_REGION=替换为你的集群实际所在的AWS区域,比如us-east-1
    deploy:
      restart_policy:
        delay: 2m

重新部署服务后,Daemon会直接读取环境变量中的区域值,不再尝试访问元数据接口,相关报错就会消失。

  • 如果业务上必须让容器访问EC2元数据服务,需要逐节点排查容器网络链路:先确认节点本身可以正常访问169.254.169.254,再检查Swarm的overlay网络规则、自定义iptables配置、出口网络策略有没有拦截该地址的80端口流量,确保容器的请求可以正常路由到元数据服务即可。

内容的提问来源于stack exchange,提问作者Archimedes Trajano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 13:06:03