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

Docker容器无法通过Consul DNS解析服务IP问题求助

Consul+Registrator+HaProxy+Docker环境容器DNS解析异常问题

我正在搭建Consul+Registrator+HaProxy+Docker项目,目前Consul的服务注册/注销功能正常,容器启停时服务能正确完成注册与注销;HaProxy也可正常将流量转发至正确的后端服务器。但容器内的服务DNS解析功能无法正常工作。

可正常运行的操作

  • 通过IP地址ping通其他容器;
  • 指定Consul DNS服务器IP,使用dig命令获取服务IP地址(dig @consul_server servicex.service.consul)。

无法正常运行的操作

  • 不指定DNS服务器IP,直接使用dig命令查询(dig servicex.service.consul);
  • 指定Consul DNS服务器IP,但不带域名后缀查询(dig @consul_server servicex);
  • 使用ping命令访问服务名,报错ping: bad address 'servicex'或ping: bad address 'servicex.service.consul'。

docker-compose配置文件

version: '3.7'
services:
  consul_server:
    image: consul:1.14.5
    container_name: consul_server
    environment:
      - SERVICE_NAME=ConsulServer
    networks:
      - consul
    ports:
      - 8400:8400 # requests from CLI
      - 8500:8500 # HTTP API requests
      - 53:53/udp # DNS
    command: "agent -server -ui -node=server-1 -bootstrap -dns-port=53 -client=0.0.0.0"

  registrator:
    image: gliderlabs/registrator:latest
    container_name: registrator
    networks:
      - consul
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock
    environment:
      - SERVICE_NAME=Registrator
    command: "-internal=true -cleanup=true consul://consul_server:8500"
    depends_on:
      - consul_server
  
  haProxy:
    image: haproxy:2.4
    container_name: haProxy
    sysctls: 
      - net.ipv4.ip_unprivileged_port_start=0
    restart: unless-stopped
    environment:
      - SERVICE_NAME=HaProxy
    volumes:
      - ./haProxy/config/:/usr/local/etc/haproxy:ro
    ports:
      - 8080:80
      - 1936:1936
    networks:
      - consul
    depends_on:
      - consul_server

  containerA:
    image: hashicorp/counting-service:0.0.2
    container_name: containerA
    expose: 
      - 9001
    dns:
      - consul_server
      - 8.8.8.8
    dns_search: service.consul
    environment:
      - SERVICE_NAME=servicex
      - SERVICE_TAGS=containerA
    networks:
      - consul
    depends_on:
      - registrator

  containerB:
    image: hashicorp/counting-service:0.0.2
    container_name: containerB
    ports: 
      - 9001
    dns:
      - consul_server
      - 8.8.8.8
    dns_search: service.consul
    environment:
      - SERVICE_NAME=servicex
      - SERVICE_TAGS=containerB
    networks:
      - consul
    depends_on:
      - registrator

networks:
  consul:
    driver: bridge

内容的提问来源于stack exchange,提问作者Sven van Zoelen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:05:36