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

私有子网EC2实例上的Docker容器无法访问AWS CloudWatch问题求助

问题根因

报错中EAI_AGAIN属于典型的DNS解析失败问题。私有子网EC2本身可正常解析CloudWatch域名,是因为实例默认使用VPC提供的私有DNS服务器(地址为VPC IPv4 CIDR网段第二个IP,例如VPC网段为10.0.0.0/16时,DNS地址是10.0.0.2),可解析出AWS服务端点的私有IP;但私有EC2上的容器默认未使用该VPC DNS,因此无法解析CloudWatch接口端点的私有地址。

解决方案

方案1:修改Docker daemon全局DNS配置(推荐,实例上所有容器生效)

直接在私有子网的EC2实例上配置Docker默认使用VPC DNS服务器,操作步骤:

  1. 先获取当前VPC的DNS服务器地址,执行命令:
# 可直接查看EC2本身的DNS配置获取地址
cat /etc/resolv.conf | grep nameserver
  1. 编辑Docker daemon配置文件/etc/docker/daemon.json(文件不存在则新建),添加DNS配置:
{
  "dns": ["你的VPC_DNS地址", "8.8.8.8"]
}
  1. 重启Docker服务使配置生效:
sudo systemctl restart docker
  1. 重启运行应用的容器,此时容器默认会使用VPC DNS解析域名,可正常解析CloudWatch的私有端点地址。

方案2:单独为容器指定DNS配置(仅目标容器生效)

如果不需要修改全局Docker配置,可在启动容器时通过--dns参数传入VPC DNS地址:

docker run -d --dns 你的VPC_DNS地址 你的应用镜像名

如果使用docker-compose部署,可在yaml文件中添加dns配置:

services:
  your-app:
    image: your-app-image
    dns:
      - 你的VPC_DNS地址
      - 8.8.8.8

方案3:WinstonCloudWatch配置显式指定端点(无需修改网络配置)

如果不想调整DNS相关配置,也可直接在Winston的CloudWatch传输器配置中,显式指定VPC接口端点地址,修改配置代码如下:

if (process.env.NODE_ENV === 'production') {
  const cloudWatchConfig = {
    logGroupName: process.env.CLOUDWATCH_GROUP_NAME,
    logStreamName: process.env.SERVICE,
    awsRegion: process.env.CLOUDWATCH_REGION,
    messageFormatter: ({ level, message }) => `[${process.env.SERVICE}:${level}] : ${message}`,
    // 新增以下配置,传入VPC CloudWatch接口端点地址
    awsOptions: {
      endpoint: process.env.CLOUDWATCH_PRIVATE_ENDPOINT, // 格式为vpce-xxx.logs.ca-central-1.vpce.amazonaws.com,可在VPC端点控制台查询
      region: process.env.CLOUDWATCH_REGION
    }
  }
  logger.add(new WinstonCloudWatch(cloudWatchConfig))
}

将VPC CloudWatch接口端点地址作为环境变量传入容器即可,不需要调整DNS配置。

验证方法

配置完成后进入容器执行以下命令验证连通性:

# 验证DNS解析是否返回私有IP
nslookup logs.ca-central-1.amazonaws.com
# 验证网络连通性
curl https://logs.ca-central-1.amazonaws.com

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:45:01