2017-12-27 14 views
0

私は非常にシンプルな領事と登録者が自分のマシンでrunnningを作っています。 領事に登録されているサービスの一覧を照会することはできますが、httpを使って他のサービスに電話することはできません。Docker環境でConsul DNSを使用した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を使ってサービスをフェッチすることができます。しかし、電話をかけてもうまくいきません。私は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); 
}); 

答えて

0

あなたは、領事に登録されているアクセスしようとしているサービスのIPアドレスは何ですか?私は登録者があなたがapp_netネットワークで期待しているipsを登録していないと思うので、あなたのために働いていないのです。その場合、登録者の文書に登録IPアドレスを操作する方法をチェックするか、サービスを領事に登録する別の方法を使用してください。

関連する問題