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

AWS EC2部署Docker化Node.js应用后API访问超时求助

Hey there! I’ve run into this exact issue when I was starting out with EC2 and Docker, so let’s break down the most likely fixes step by step:

常见排查与修复步骤

1. 先检查EC2安全组(这是最容易踩的坑!)

  • 你的EC2实例的安全组入站规则必须允许8080端口的外部访问:
    • 登录AWS控制台,找到你的EC2实例,点击关联的“安全组”
    • 进入“编辑入站规则”,添加一条规则:
      • 类型:Custom TCP
      • 端口范围:8080
      • 源:暂时设为0.0.0.0/0(仅测试用,之后改成你的公网IP更安全)
  • 如果这条规则没加,外部请求根本到不了你的EC2实例,自然会超时。

2. 确认容器端口映射是否正确

  • 运行容器时,一定要加上端口映射参数,把容器内的8080端口映射到EC2主机的8080端口:
    docker run -d -p 8080:8080 your-dockerhub-username/your-image-name
    
  • 用docker ps命令检查映射状态,输出里应该有类似0.0.0.0:8080->8080/tcp的内容,说明主机端口已经和容器端口绑定。

3. 检查Node.js应用的绑定地址

  • 很多新手会把Node服务绑定到localhost或127.0.0.1,这会导致只有容器内部能访问,外部(包括EC2主机)都连不上!
  • 必须把服务绑定到0.0.0.0,这样容器才能接收来自外部的请求:
    const express = require('express');
    const app = express();
    
    app.get('/', (req, res) => {
      res.send('Hello World!');
    });
    
    // 关键:绑定到0.0.0.0而不是localhost
    app.listen(8080, '0.0.0.0', () => {
      console.log('Server running on port 8080');
    });
    
  • 修改后重新构建镜像,推送到Docker Hub,再在EC2上拉取最新镜像运行。

4. 验证EC2主机内部能否访问容器

  • 在EC2的终端里执行curl http://localhost:8080:
    • 如果能返回“Hello World!”,说明容器和主机的连接没问题,问题出在外部网络(安全组或防火墙)
    • 如果curl也超时,那说明容器本身的配置有问题,回到步骤2和3重新检查。

5. 检查EC2主机的防火墙设置

  • 部分EC2镜像(比如Amazon Linux 2)自带防火墙,可能会拦截8080端口的流量:
    • 临时关闭防火墙测试:
      • Amazon Linux 2: sudo systemctl stop firewalld
      • Ubuntu: sudo ufw disable
    • 如果关闭后能访问,记得添加允许8080端口的规则再重新开启防火墙,比如Ubuntu下执行sudo ufw allow 8080。

按照这个顺序排查,基本能解决90%的这类问题。如果还是不行,可以告诉我你的EC2镜像类型和Docker运行命令,我再帮你细化排查!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:31:21