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

ECS Fargate部署的Mongo Express公网8081端口无法访问求助

问题:ECS Fargate上Mongo Express无法通过公网端口访问,Java应用正常

我基于ECS Fargate搭建了一套包含Java(Spring Boot)后端和Mongo Express的简单应用栈。MongoDB部署在独立主机上,Fargate栈可正常访问该数据库,启动日志显示Java后端与Mongo Express均成功连接数据库。我已在安全组(SG)中配置了入站规则,开放了Java应用的8080端口和Mongo Express的8081端口。

但目前仅能通过http://<public_ip>:8080访问Java应用,尝试连接Mongo Express的8081端口时出现连接挂起的情况。

我是否需要配置反向代理(如Nginx)来路由Mongo Express的网络请求?据我所知,只要应用实现了路由机制(如Express服务器),无需Nginx即可直接访问对应端口(此处为8081)。我对Mongo Express和Node.js了解不多,但从文档得知它依赖Node.js运行。

请问为何无法通过http://<public_ip>:8081访问Mongo Express?希望能得到排查线索。

任务定义

{
    "family": "service-connect-backend-task",
    "executionRoleArn": "*************************",
    "taskRoleArn": "************************",
    "networkMode": "awsvpc",
    "containerDefinitions": [
      {
        "name": "java",
        "image": "********************************",
        "cpu": 256,
        "memory": 512,
        "portMappings": [
          {
              "name": "java-8080",
              "containerPort": 8080,
              "protocol": "tcp",
              "appProtocol": "http"
          }
        ],
        "essential": true,
        "environment": [
          {
            "name": "DB_HOST",
            "value": "****************"
          },
          {
            "name": "SPRING_ACTIVE_PROFILE",
            "value": "develop"
          }
        ],
        "logConfiguration": {
          "logDriver": "awslogs",
          "options": {
              "awslogs-create-group": "true",
              "awslogs-group": "/ecs/service-connect-java-backend",
              "awslogs-region": "********", 
              "awslogs-stream-prefix": "java"
          }
        },
        "healthCheck": {
          "command": [
            "CMD-SHELL",
            "echo HealthOk"
          ],
          "interval": 5,
          "timeout": 2,
          "retries": 3,
          "startPeriod": 10
        }
      },
      {
        "name": "mongo-express",
        "image": "mongo-express",
        "cpu": 256,
        "memory": 512,
        "portMappings": [
          {
              "name": "mongoexpress-8081",
              "containerPort": 8081,
              "protocol": "tcp", 
              "appProtocol": "http"
          }
        ],
        "essential": true,
        "environment": [
          {
            "name": "ME_CONFIG_BASICAUTH_PASSWORD",
            "value": "****************"
          },
          {
            "name": "ME_CONFIG_MONGODB_AUTH_USERNAME",
            "value": " ****************"
          },
          {
            "name": "ME_CONFIG_MONGODB_SERVER",
            "value": "****************"
          },
          {
            "name": "ME_CONFIG_BASICAUTH_USERNAME",
            "value": "****************"
          },
          {
            "name": "ME_CONFIG_MONGODB_AUTH_PASSWORD",
            "value": "****************"
          },
          {
            "name": "ME_CONFIG_MONGODB_AUTH_DATABASE",
            "value": "admin"
          }
        ],
        "logConfiguration": {
          "logDriver": "awslogs",
          "options": {
              "awslogs-create-group": "true",
              "awslogs-group": "/ecs/service-connect-mongo-express",
              "awslogs-region": "******", 
              "awslogs-stream-prefix": "mongo-express"
          }
        }
      }
    ],
    "cpu": "512",
    "memory": "1024"
}

服务定义

{
    "cluster": "ce-develop-cluster",
    "deploymentConfiguration": {
        "maximumPercent": 200,
        "minimumHealthyPercent": 100
    },
    "deploymentController": {
        "type": "ECS"
    },
    "desiredCount": 1,
    "enableECSManagedTags": true,
    "enableExecuteCommand": true,
    "launchType": "FARGATE",
    "networkConfiguration": {
        "awsvpcConfiguration": {
            "assignPublicIp": "ENABLED",
            "securityGroups": [
                "****************"
            ],
            "subnets": [
                "****************"
            ]
        }
    },
    "platformVersion": "LATEST",
    "propagateTags": "SERVICE",
    "serviceName": "service-connect-backend-service",
    "serviceConnectConfiguration": {
        "enabled": true,
        "services": [
            {
                "portName": "java-8080",
                "clientAliases": [
                    {
                        "dnsName": "backend",
                        "port": 80
                    }
                ]
            },
            {
                "portName": "mongoexpress-8081",
                "clientAliases": [
                    {
                        "dnsName": "mongo-express",
                        "port": 81
                    }
                ]
            }
        ],
        "logConfiguration": {
            "logDriver": "awslogs",
            "options": {
                "awslogs-create-group": "true",
                "awslogs-group": "/ecs/service-connect-backend-proxy",
                "awslogs-region": "********",
                "awslogs-stream-prefix": "service-connect-backend-proxy"
            }
        }
    },
    "taskDefinition": "service-connect-backend-task"
}

补充说明

  • 使用ECS Service Connect是为了未来在栈中添加更多应用(如React客户端),使其能通过Service Connect命名空间与后端通信,但不确定这是否会影响从公网直接访问容器。
  • 已禁用Service Connect并更新服务,但问题仍未解决。

排查线索和解决方案

以下是针对该问题的具体排查方向:

  • 验证Mongo Express容器的端口监听情况
    用ECS Exec进入Mongo Express容器,执行netstat -tulpn或ss -tulpn命令,确认容器内8081端口是否被Node.js进程监听。如果端口未监听,说明Mongo Express启动异常,检查容器日志中是否有启动报错(比如环境变量配置错误、依赖缺失)。

  • 检查任务网络端口映射是否生效
    在ECS控制台查看任务详情,确认Mongo Express的端口映射是否已正确关联到任务的弹性网络接口(ENI)。Fargate使用awsvpc模式时,容器端口会直接绑定到任务的ENI上,需确保映射的端口在ENI上可见。

  • 重新确认安全组和网络ACL规则
    安全组入站规则需确认:

    • 允许0.0.0.0/0或你的公网IP段访问8081端口(TCP协议)
    • 安全组已正确关联到Fargate任务的ENI
      同时检查子网对应的网络ACL,确保入站规则允许8081端口流量,出站规则允许容器的响应流量(比如临时端口范围)。
  • 检查Mongo Express的绑定地址配置
    默认情况下Mongo Express绑定localhost,这会导致仅容器内部可访问,无法通过ENI访问。需设置环境变量ME_CONFIG_SERVER_ADDR=0.0.0.0,让服务绑定到所有网卡地址。从你的任务定义看,未配置该变量,这很可能是问题所在。

  • 测试任务内部访问Mongo Express
    通过ECS Exec进入Java容器,执行curl http://localhost:8081,如果能正常返回响应,说明容器内服务正常,但公网流量无法到达;如果也无法访问,说明容器内服务本身未正常启动或监听端口错误。

  • 确认公网IP是否正确
    确保你访问的是Fargate任务的公网IP,而不是集群或服务的其他IP。在ECS控制台任务详情中可以查看任务的公网IP地址。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:54:53