繁体   English   中英

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

[英]Http request using Consul DNS in Docker environment

我的机器上有一个非常简单的领事和注册人撰写runnning。 我可以查询在领事中注册的服务列表,但是无法使用http调用其他服务。

码头工人组成:

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解析也可以。 但是get调用不起作用。 我得到了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);
});

您没有提到在Consul中注册的您要访问的服务的IP地址是什么。 我怀疑注册者未在app_net网络中注册您期望的ip,这就是为什么它对您不起作用的原因。 如果是这种情况,请检查注册人的文档中的如何操作已注册的IP地址或使用其他方法将服务注册到Consul。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM