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

Docker部署的Go应用消费消息时出现Connection Refused错误

问题解决:Docker中Go应用无法连接本地STOMP服务

核心原因

Docker容器的localhost指向容器自身的网络环境,而非宿主机。你的Go应用在容器里访问localhost:61616,实际是尝试连接容器内部的61616端口,但STOMP服务运行在宿主机的Tomcat上,所以会出现连接拒绝。而本地Java应用直接使用宿主机的localhost,自然能正常连接。

解决方案

1. 修改Go代码的连接地址

把代码中的"localhost:61616"替换为宿主机的实际IP地址,或者使用Docker提供的宿主机别名:

  • Windows/macOS:Docker内置了host.docker.internal作为宿主机的别名,直接用这个地址即可:
    import (
        "fmt"
        "github.com/go-stomp/stomp/v3"
    )
    
    func main() {
        conn, err := stomp.Dial("tcp", "host.docker.internal:61616")
        if err != nil {
            fmt.Println("连接失败: ", err.Error())
            return
        }
        defer conn.Disconnect()
        fmt.Println("连接成功")
    }
    
  • Linux:启动容器时添加--add-host=host.docker.internal:host-gateway参数,然后代码里同样使用host.docker.internal:61616;或者直接使用宿主机的局域网IP(比如192.168.1.100:61616)。

2. 确认Tomcat STOMP服务的绑定地址

检查Tomcat的STOMP配置,确保服务绑定到0.0.0.0(允许所有IP访问),而不是仅127.0.0.1(仅本地访问)。如果绑定的是127.0.0.1,即使容器用了宿主机IP,也无法访问。

3. 检查宿主机防火墙设置

确保宿主机的61616端口没有被防火墙拦截,允许Docker容器所在的网络段访问该端口。

验证修改

修改代码后重新构建Docker镜像并启动容器,再次尝试连接STOMP服务,应该能正常建立连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:00:07