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

Quarkus无法在80端口启动:报错端口被占用但实际端口空闲

排查Quarkus容器启动提示80端口被占用的问题
  • 确认宿主机端口检测的准确性
    不要仅依赖常规工具,用更精准的命令排查:

    sudo ss -tulpn | grep ":80"
    

    该命令会显示监听80端口的进程PID和名称,确保没有遗漏隐藏进程。同时检查是否有web服务(如nginx、apache)自启:

    systemctl list-unit-files | grep enabled | grep -E "(nginx|apache)"
    
  • 排查特权端口的权限问题
    80属于1-1024范围内的特权端口,默认非root用户进程无法绑定。如果容器内Quarkus以非root用户运行,即使宿主机端口空闲,也会触发类似“端口被占用”的错误。解决方法二选一:

    1. 启动容器时指定root用户:
      docker run --pull always --network host -e QUARKUS_PROFILE=prod --user root vishwa86/user-service:latest
      
    2. 宿主机调整内核参数,允许非root用户监听特权端口:
      sudo sysctl -w net.ipv4.ip_unprivileged_port_start=0
      
      (该设置临时生效,重启后需重新执行,若要永久生效可写入/etc/sysctl.conf)
  • 从容器视角验证端口状态
    用同网络的临时容器检查端口,排除宿主机与容器网络视角不一致的问题:

    docker run --network host --rm alpine ss -tulpn | grep ":80"
    
  • 确认Quarkus配置的实际生效值
    检查是否有其他配置覆盖了%prod.quarkus.http.port=80:

    1. 启动命令中是否通过环境变量指定了其他端口?比如-e QUARKUS_HTTP_PORT=xxx
    2. 是否挂载了自定义的application.properties覆盖容器内配置?
      可添加日志级别参数,查看启动时的实际配置:
    docker run --pull always --network host -e QUARKUS_PROFILE=prod -e QUARKUS_LOG_LEVEL=DEBUG vishwa86/user-service:latest
    

    从日志中搜索quarkus.http.port,确认生效的端口值。

  • 排查安全模块限制
    检查宿主机防火墙、SELinux或AppArmor是否阻止进程绑定80端口:

    • 查看SELinux状态:getenforce,若为Enforcing模式,可临时关闭测试:sudo setenforce 0
    • 检查iptables规则:sudo iptables -L -n,确认没有拒绝绑定80端口的规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:47:45