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

VM中Docker容器内Quarkus服务端口转发后无法访问排查

故障原因分析

Ubuntu 22.04默认启用IPv6,Docker在该环境下会自动将端口映射同时绑定IPv4(0.0.0.0)和IPv6(::)地址。但虚拟机的网络环境通常未配置完整的IPv6支持,或者防火墙/网络策略未放行IPv6流量,导致Docker的端口转发逻辑出现异常——当你访问localhost:8080时,系统可能优先尝试IPv6连接,而虚拟机无法处理该请求,最终触发连接重置错误。改用network_mode: host时,容器直接使用宿主机网络栈,绕过了Docker的端口转发逻辑,因此能正常访问。

解决方法

方法1:临时禁用Docker IPv6支持(快速解决)

  • 编辑Docker配置文件:sudo nano /etc/docker/daemon.json
  • 添加或修改以下内容:
    {
      "ipv6": false,
      "fixed-cidr-v6": ""
    }
    
  • 重启Docker服务:sudo systemctl restart docker
  • 重新启动所有相关容器,此时端口映射仅绑定IPv4地址,执行curl localhost:8080测试连通性。

方法2:正确配置Docker IPv6(保留IPv6需求时)

  • 先确保虚拟机的网络接口已启用IPv6并分配了有效地址,可通过ip -6 addr查看。
  • 编辑/etc/docker/daemon.json配置IPv6:
    {
      "ipv6": true,
      "fixed-cidr-v6": "fd00:dead:beef::/48",
      "ip6tables": true
    }
    
  • 重启Docker服务:sudo systemctl restart docker
  • 放行IPv6的8080端口流量:sudo ip6tables -A INPUT -p tcp --dport 8080 -j ACCEPT
  • 重新启动容器,测试curl localhost:8080或curl [::1]:8080是否正常。

方法3:排查防火墙与端口转发规则

  • 检查Ubuntu的ufw防火墙,确保放行IPv4的8080端口:sudo ufw allow 8080/tcp
  • 查看Docker的iptables规则,确认存在正确的端口转发:sudo iptables -t nat -L -n | grep 8080,应能看到类似DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.x.x.x:8080的规则。

方法4:确认Quarkus绑定配置

  • 检查Quarkus的application.properties,确保明确绑定IPv4地址:
    quarkus.http.host=0.0.0.0
    quarkus.http.port=8080
    
  • 重新构建镜像并启动容器,避免服务仅监听IPv6地址的情况。

内容的提问来源于stack exchange,提问作者tim-danger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:50:12