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

AWS EC2上Docker部署Node.js应用无响应问题求助

AWS EC2上Docker部署Node.js应用无响应排查方案

我尝试用Docker在AWS EC2服务器上部署一个简单的Node.js应用,本地执行docker-compose up -d --build能正常运行,但服务器端访问无响应。相关配置及日志如下:

核心配置文件

index.js

require("dotenv").config();
const express = require("express");
const app = express();
app.use("/api", (req, res) => {
  res.status(200).send("Test Deployment");
});
const port = process.env.PORT;
app.listen(port, () => {
  console.log("server runs on port =", port);
});

Dockerfile

FROM node:18.13-alpine
WORKDIR /app
COPY package.json .
RUN npm install --only=production;
COPY . .
EXPOSE 3000
CMD ["npm", "run", "start"]

docker-compose.yml

version: "3"
services:
  backend:
    container_name: backend
    ports:
      - "3000:3000"
    build: .
    environment:
      PORT: "3000"
    command: npm run start

服务器容器日志

执行docker logs backend -f得到以下日志:

test-docker$ docker logs backend -f

> test-node@1.0.0 start
> node .

server runs on port = 3000

排查步骤

  • 检查EC2安全组规则:确保安全组入站规则允许3000端口的TCP流量,测试阶段可将来源设置为0.0.0.0/0,后续再限制为指定IP。
  • 验证服务器端口监听:在EC2上执行netstat -tulpn | grep 3000,确认主机3000端口被docker-proxy进程监听;若未查到,检查端口映射配置或重启Docker服务:sudo systemctl restart docker。
  • 测试容器内部连通性:执行docker exec -it backend curl http://localhost:3000/api,若能返回预期内容,说明容器内服务正常,问题出在外部网络;若失败,检查Node.js代码是否绑定0.0.0.0(默认app.listen(port)已绑定,若手动指定localhost则外部无法访问)。
  • 检查网络ACL:确认子网关联的网络ACL入站规则允许3000端口TCP流量,出站规则允许临时端口(1024-65535)的响应流量。
  • 确认访问地址:确保使用EC2的公网IP/弹性IP访问,格式为http://<EC2公网IP>:3000/api,而非内网IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:20:34