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

Docker容器中Golang调用Odoo接口报连接拒绝错误如何解决

问题根因

Docker 容器默认拥有独立的网络命名空间,容器内的localhost指向的是容器自身的环回地址,而非宿主机或其他容器的网络地址。你在代码中硬编码了http://localhost:8091作为Odoo服务地址,当golang服务在容器内运行时,会尝试访问自身的8091端口,自然会触发连接拒绝报错。

Golang侧解决方案

推荐优先使用可配置的环境变量方案,灵活性最高,适配开发、生产多场景:

  • 方案1:将Odoo服务地址改为从环境变量读取,保留本地开发默认值
    调整代码如下:

    import "os"
    
    // 优先读取环境变量中的ODOO_API_URL,默认值保留本地开发时的localhost地址
    var OdoobaseURL = getEnv("ODOO_API_URL", "http://localhost:8091/api/order")
    
    func getEnv(key, fallback string) string {
        if value, ok := os.LookupEnv(key); ok {
            return value
        }
        return fallback
    }
    

    运行golang容器时传入对应环境变量即可,需保证两个容器处于同一Docker网络下:

    1. docker run启动示例:
      docker run -e ODOO_API_URL=http://<你的odoo容器名称>:8091/api/order <你的golang镜像名称>
    2. docker-compose配置示例:
    services:
      golang-service:
        image: 你的golang镜像名
        environment:
          - ODOO_API_URL=http://odoo-service:8091/api/order
      odoo-service:
        image: 你的odoo镜像名
        expose:
          - 8091
    
  • 方案2:开发环境临时硬编码(不推荐生产使用)
    如果你仅需要本地开发临时调试,可以直接修改硬编码的地址:

    • Docker for Mac/Windows 环境可以改为 http://host.docker.internal:8091/api/order,该特殊域名会自动指向宿主机
    • Linux 环境可以改为宿主机的局域网IP,同时保证odoo容器的8091端口已经映射到宿主机8091端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 21:15:04