用Docker在8080端口部署NodeJS服务并暴露后,本地如何访问?
解决EC2实例上Docker部署NodeJS服务本地无法访问的问题
1. 先搞定EC2安全组的入站规则
- 得给EC2的安全组加一条允许8080端口的入站规则:
- 类型选「自定义TCP」,端口范围填
8080,源可以设为0.0.0.0/0(仅测试用,生产环境建议限制成你自己的本地公网IP) - 要是用了AWS的网络ACL,也得确认ACL的入站规则放开了8080端口
- 类型选「自定义TCP」,端口范围填
2. 确认Docker端口映射没搞错
- 启动容器的时候必须把容器内的8080端口映射到EC2实例的8080端口,命令得是这种:
docker run -d -p 8080:8080 <你的镜像名称> - 跑个
docker ps看看容器状态,只要PORTS列显示0.0.0.0:8080->8080/tcp或者:::8080->8080/tcp,就说明映射没问题
3. 用对访问地址
- 别用你本地的IP来访问,得用EC2实例的公网IP或者弹性IP,要是有绑定域名的话用域名也行
- 正确的访问格式:
http://<EC2公网IP>:8080或者http://<EC2绑定的域名>:8080
4. 检查EC2实例内部的防火墙
- 如果EC2上装了
ufw或者iptables这类防火墙工具,得确保8080端口被允许:- 用ufw的话执行:
sudo ufw allow 8080/tcp - 用iptables的话执行:
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
- 用ufw的话执行:
5. 验证容器内服务是否正常
- 进容器里测试下服务本身能不能跑通,排除服务自身的问题:
docker exec -it <容器ID或名称> curl localhost:8080
要是能拿到正常响应,就说明服务没问题,继续排查外部访问的配置
内容的提问来源于stack exchange,提问作者Bruno Peixoto
相关产品推荐
相关产品推荐

