You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Docker问题:EC2实例上运行的Web应用容器无法通过绑定端口访问

排查EC2上Docker容器端口无法访问的问题

嘿,作为Docker和AWS新手碰到这种情况真的太常见了——别着急,咱们一步步拆解问题,下面是几个最可能的原因和对应的排查步骤:

1. 先确认容器内的服务真的在监听正确端口

EXPOSE指令只是告诉Docker容器要暴露哪些端口,但不代表你的应用真的在这些端口上监听请求。你可以通过以下命令验证:

  • 进入容器内部查看端口监听:
    sudo docker exec -it demo-app-1 bash
    # 进入容器后,安装netstat(如果没装的话)
    apt update && apt install net-tools
    # 查看监听的端口
    netstat -tulpn
    
  • 重点看你的应用是不是绑定在0.0.0.0:50000.0.0.0:5100,而不是127.0.0.1。如果是绑定到localhost,容器外部(包括EC2主机)根本访问不到。

2. 检查Docker端口映射的正确性

你的运行命令里有个细节:-p 808:5100——这里主机端口是808,是不是少写了一位?比如应该是8081:5100?先不管这个,先确认主机上的端口是否被Docker正确监听:

sudo netstat -tulpn | grep docker-proxy

看看输出里有没有0.0.0.0:80800.0.0.0:808(如果是你写的808的话),如果没有,说明端口映射没生效,重新运行容器时检查命令有没有打错。

3. 检查EC2的安全组配置(最容易忽略的点!)

AWS默认的安全组只允许SSH(22端口)流量进入,所以你需要手动添加入站规则:

  • 登录AWS控制台,找到你的EC2实例,进入对应的安全组页面
  • 添加两条入站规则:
    • 类型:TCP,端口范围:8080,来源:0.0.0.0/0(测试用,之后可以改成你的IP)
    • 类型:TCP,端口范围:808(或者你实际用的主机端口),来源:0.0.0.0/0
  • 保存规则后再尝试访问

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

如果EC2用的是Ubuntu,默认可能开启了ufw防火墙,会阻止外部访问主机端口:

  • 查看防火墙状态:
    sudo ufw status
    
  • 如果显示active,可以临时关闭防火墙测试:
    sudo ufw disable
    
  • 如果关闭后能访问了,就添加入站规则允许对应端口:
    sudo ufw allow 8080/tcp
    sudo ufw allow 808/tcp
    sudo ufw enable
    

5. 确认你用的是EC2的公网IP访问

别用EC2的私有IP(比如172.x.x.x或者10.x.x.x),这个只能在VPC内部访问。你需要用EC2实例的公网IP或者分配的弹性IP来访问,格式是http://<公网IP>:8080

先从这几个点排查,大概率能解决问题!

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

火山引擎 最新活动