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

如何在docker-compose环境中配置解析Consul的.service.consul域名

解决方案

出现该问题的核心原因是Docker默认内置DNS服务不会将.consul后缀的域名解析请求转发到你部署的Consul服务DNS端口,仅宿主机配置了对应解析规则所以本地运行正常,两种适配方案如下:

方案一:修改docker-compose配置,指定容器DNS(适配你当前KrakenD用DNS做服务发现的配置)

直接在需要解析Consul域名的服务(krakend、google-search-service如果有需要也可以加)下新增DNS配置即可,修改后的krakend服务配置如下:

krakend:
  image: devopsfaith/krakend
  container_name: krakend
  volumes:
    - ./krakend:/etc/krakend
  ports:
    - "1234:1234"
    - "8080:8080"
    - "8090:8090"
  networks:
    - micros
  # 新增以下配置
  dns:
    - 127.0.0.11 # 保留Docker默认DNS,用于解析同Docker网络内的服务名
    - consul # 指向同网络下的Consul服务,作为备用DNS解析.consul后缀域名
  dns_opt:
    - "ndots:2" # 适配多段式域名的解析优先级

方案二:改用KrakenD原生Consul服务发现(更稳定,无需修改Docker网络配置)

KrakenD本身支持直接对接Consul的HTTP API做服务发现,不用走DNS解析链路,出错概率更低,修改方式如下:

  1. 修改KrakenD全局配置,新增Consul服务发现的全局配置:
{
  "version": 2,
  "extra_config": {
    "github_com/devopsfaith/krakend-gologging": {
      "level": "ERROR",
      "prefix": "[KRAKEND]",
      "syslog": false,
      "stdout": true,
      "format": "default"
    },
    // 新增Consul服务发现配置
    "github_com/devopsfaith/krakend-sd-consul": {
      "address": "consul:8500",
      "scheme": "http"
    }
  },
  // 其余原有全局配置保持不变
  ...
}
  1. 修改对应endpoint的backend配置,将服务发现类型改为consul:
"backend": [
  {
    "sd": "consul", // 从dns改为consul
    "url_pattern": "/external-dbs/google/{searchParam}",
    "host": [
      "google-search-service" // 直接填Consul上注册的服务名即可
    ],
    "disable_host_sanitize": true
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:15:03