EC2实例中Docker容器前端无法连接后端问题排查求助
问题:单容器部署前后端至EC2后前端无法连接后端
我将前端(React应用,运行在3000端口)与后端(Node/Express服务,用nodemon运行在5000端口)部署在同一个Docker容器中,本地运行时前后端交互正常,但部署到EC2实例后,仅前端可访问,无法连接后端。已确认EC2安全组开放了3000和5000端口,容器也在对应端口运行。除完整应用代码外,我还可提供哪些信息帮助定位问题?
已提供的配置信息
Dockerfile内容
FROM node:16.17.0 WORKDIR /client COPY ./client/package.json ./client/package.json RUN npm i COPY ./client ./client WORKDIR /server COPY ./server/package.json ./server/package.json RUN npm i COPY ./server ./server EXPOSE 3000 5000 WORKDIR /client CMD ["npm", "run", "remote-start"]
前端proxy配置
客户端package.json中配置了代理:
"proxy": "http://<IP-Address>:5000"
本地环境下设置为"proxy": "http://localhost:5000"可正常工作,remote-start脚本负责同时启动前后端服务。
可补充的排查信息建议
- 容器内服务状态验证:在EC2上进入容器内部,执行
curl localhost:5000测试后端接口是否响应;用ps aux确认后端进程是否在运行 - EC2网络配置细节:
- 确认proxy配置中的
<IP-Address>是否与EC2实例的公网/弹性IP一致 - 检查EC2的网络ACL是否允许5000端口的入站、出站流量(安全组允许但ACL可能有限制)
- 确认proxy配置中的
- 前端请求错误详情:
- 在浏览器开发者工具的Network面板查看后端接口请求的状态码、请求地址,记录具体错误(如404、跨域、连接超时)
- 查看浏览器控制台的报错信息,确认是否存在DNS解析失败、跨域限制等问题
- 容器端口映射配置:确认启动容器时是否执行了
docker run -p 3000:3000 -p 5000:5000 ...,端口映射是否正确 - 后端服务绑定地址:检查Node/Express代码中,服务是否绑定到
0.0.0.0而非localhost(绑定localhost会导致容器外部无法访问) - 后端服务日志:执行
docker logs <容器ID>查看后端启动日志,确认是否有启动失败、端口占用、依赖缺失等报错 - remote-start脚本内容:提供脚本的具体代码,确认是否存在EC2环境下导致后端无法启动的逻辑(如环境变量缺失、路径错误)
内容的提问来源于stack exchange,提问作者Diomedes
相关产品推荐
相关产品推荐

