老师,我有两个dns_resolver的ip,访问不了consul里注册的服务,请问有什么办法可以解决呢?

老师,我有两个dns_resolver的ip,访问不了consul里注册的服务,请问有什么办法可以解决呢?

这是我的dockerfile

version: '3'

services:

  kong-database:
    image: postgres:12
    container_name: kong-database
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=kong
      - POSTGRES_DB=kong
      - POSTGRES_PASSWORD=kong
    networks:
      - kong-net
    volumes:
      - "db-data-kong-postgres:/var/lib/postgresql/data"

  kong-migrations:
    image: kong
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=kong-database
      - KONG_PG_PASSWORD=kong
      - KONG_CASSANDRA_CONTACT_POINTS=kong-database
    command: kong migrations bootstrap
    restart: on-failure
    networks:
      - kong-net
    depends_on:
      - kong-database

  kong:
    image: kong
    container_name: kong
    environment:
      - LC_CTYPE=en_US.UTF-8
      - LC_ALL=en_US.UTF-8
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=kong-database
      - KONG_PG_USER=kong
      - KONG_PG_PASSWORD=kong
      - KONG_PROXY_ACCESS_LOG=/dev/stdout
      - KONG_ADMIN_ACCESS_LOG=/dev/stdout
      - KONG_PROXY_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl
      - KONG_PROXY_LISTEN=0.0.0.0:8000, 0.0.0.0:8443 ssl
      - KONG_DNS_RESOLVER=127.0.0.11, 192.168.1.38:8600
    restart: on-failure
    ports:
      - 8000:8000
      - 8443:8443
      - 8001:8001
      - 8444:8444
      - 8600:8600
    links:
      - kong-database:kong-database
    networks:
      - kong-net
    depends_on:
      - kong-migrations
      
  konga:
    image: pantsel/konga
    ports:
      - 1337:1337
    links:
      - kong:kong
    container_name: konga
    environment:
      - NODE_ENV=production

volumes:
  db-data-kong-postgres:

networks:
  kong-net:
    external: false

这是konga里面gateway/info信息
图片描述
我觉得应该是dns_resolver配置导致的原因。因为如果我在dockerfile不加127.0.0.11这个docker的ip,在外界浏览器上访问不了kong的8001服务,加了的话在在上面就有两个dns了。请问老师有什么办法可以解决呢?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
爱吃apple的阿狸 2023-04-08 01:36:22

你的yml配置,有问题,kong这个服务使用的是docker的bridge网络:

networks:
 - kong-net

虽然你填了127.0.0.11这个默认的DNS,能找到postgres这个DB,但是你后面192.168.1.38:8600这个在容器里面怎么找得到外面的consul服务~

实际上就是你第一个DNS没问题,第二个用不了。


解决方法

第一种就是你可以再把consul也放到这个yml文件里编排,让他们在同一个network里,再把第二个DNS改成服务名。


或者第二种方式,就是你把kong这个服务的network改成host,就是docker的网络类型host,这样你的kong服务就直接使用宿主机的IP的端口了,你的DNS地址就可以直接填consul的地址了,还有database配置也要改成IP地址,就行了


我是使用第二种方式的

bobby 2022-11-06 10:03:05
  1. 看一下服务注册的地址什么在

  2. dns_resolver的容器中ping一下看看服务器的ip是否能ping通

  • 提问者 beginnerv #1

    1.服务注册的也在

    https://img1.sycdn.imooc.com//climg/636813460997faf128101226.jpg

    2.kong的容器中可以ping通consul的服务ip

    https://img1.sycdn.imooc.com//climg/636812ad096df8f407940156.jpg

    2022-11-07 04:16:28
  • bobby 回复 提问者 beginnerv #2

    你留个qq 我加你看看吧

    2022-11-07 13:37:08
  • 提问者 beginnerv 回复 bobby #3

    我发过q了,但是回复好像不会显示

    2023-04-08 11:00:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师