在Docker环境中使用Consul DNS的Http请求

问题描述 投票:0回答:1

我有一个非常简单的领事和registrator compose在我的机器上运行。我可以查询在consul中注册的服务列表,但我无法使用http拨打其他服务。

docker-compose:

version: '2.1'

services:

  consul:
    image:  gliderlabs/consul:latest
    command: "agent -server -data-dir /tmp/consul -bootstrap -ui -client=0.0.0.0"
    ports:
    - 8500:8500
    - 8600:8600
    - 8400:8400
    networks:
      app_net:
        ipv4_address: 172.28.0.10

  registrator:
    image: gliderlabs/registrator:latest
    command: "consul://consul:8500"
    depends_on:
    - consul
    volumes:
    - /var/run/docker.sock:/tmp/docker.sock
    networks:
      - app_net

  service1:
    image: solive/service1
    ports:
    - 3000
    depends_on:
    - consul
    - registrator
    networks:
      - app_net

  service2:
    image: solive/service2
    ports:
    - 4000
    depends_on:
    - consul
    - registrator
    networks:
      - app_net

networks:
  app_net:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16

我试图使用axios,但听起来它不使用配置的DNS。我再一次设法获得了我的服务列表。所以我可以注册一个服务,我可以使用consul.agent获取服务,DNS解析也可以。但是来电不起作用。我得到了ENOTFOUND

const request = require('request');
var dns = require('dns');
var consul = require('consul')(
  {
    host: '172.28.0.10',
    port: '8500'
  }
);

dns.setServers(['172.28.0.10:8600']);

dns.resolveSrv("service1.service.consul", function(err, records){
        console.log("\nDNS SRV query");
        if(err){
                console.log(err);
        }else{
                console.log(records);
        }
});

request('http://service1.service.consul', { json: true }, (err, res, body) => {
  if (err) { return console.log(err); }
  console.log(body.url);
  console.log(body.explanation);
});
node.js docker consul
1个回答
0
投票

您还没有提到在Consul中注册的您尝试访问的服务的IP地址是什么。我怀疑registrator没有在app_net网络中注册你期望的ips,这就是为什么它不适合你。如果是这种情况,请检查registrator的文档如何操作已注册的IP地址或使用其他方法向Consul注册服务。

© www.soinside.com 2019 - 2024. All rights reserved.