簡體   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