[英]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.