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
相关产品推荐
相关产品推荐

