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

如何排查容器内Quarkus应用的Connection refused问题?

排查DMZ环境下Quarkus容器连接拒绝问题的步骤
  • 用Java自带工具测试基础连通性
    由于micro镜像无curl,可借助Java代码临时验证目标端点的网络可达性。在应用启动逻辑中添加以下代码片段:

    try (Socket socket = new Socket()) {
        socket.connect(new InetSocketAddress("目标域名", 目标端口), 5000);
        System.out.println("成功连接到目标端点");
    } catch (IOException e) {
        System.err.println("连接失败详情: " + e.getMessage());
        e.printStackTrace();
    }
    

    部署后查看应用日志,判断是DNS解析失败还是端口无法访问。

  • 检查容器DNS配置
    进入容器后,通过Java代码读取/etc/resolv.conf内容,确认DNS服务器配置是否正确:

    try (BufferedReader reader = new BufferedReader(new FileReader("/etc/resolv.conf"))) {
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    若DNS解析异常,可在容器启动时添加--dns <DNS服务器IP>参数,或在Quarkus配置中指定quarkus.dns.nameservers。

  • 验证容器网络归属
    检查Quarkus容器与目标端点容器是否处于同一Docker网络:

    # 在宿主机执行
    docker inspect <Quarkus容器ID> | grep Networks
    docker inspect <目标容器ID> | grep Networks
    

    若不在同一网络,需将Quarkus容器加入目标容器所在网络,或创建共享网络实现互通。

  • 排查DMZ网络规则限制
    宿主机curl能通不代表容器网络不受限制,联系运维团队确认:

    • 容器所在网段到目标容器网段的端口是否开放
    • 目标端点是否配置了仅允许宿主机IP访问的防火墙规则
    • DMZ区域是否存在NAT或路由规则导致容器流量无法到达目标
  • 临时换用完整镜像辅助排查
    临时替换为quarkus/quarkus-jvm-image(包含curl等工具),进入容器后直接执行curl <目标端点>,快速验证容器内是否能正常访问目标,排除镜像环境差异问题。

  • 开启Quarkus客户端详细日志
    在application.properties中添加日志配置,捕获JAX-RS客户端的完整请求流程:

    quarkus.log.category."org.jboss.resteasy.client".level=DEBUG
    quarkus.log.category."org.apache.http".level=DEBUG
    quarkus.log.category."java.net".level=DEBUG
    

    通过日志定位DNS解析、连接建立、请求发送等环节的具体异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:18:19