你不需要在每个 docker 容器上运行 consul 代理,你可以通过将 consul 的 DNS 暴露到本地来简单地利用 consul。以下内容不是来自容器,但无论如何您都会了解我在做什么。
以下是我用来运行代理的命令
consul agent -data-dir /var/lib/consul/ -config-dir /etc/consul.d/ -bind 10.X.X.X -dns-port 53 -join consul-master
注意:我已经为 consul-master 添加了一个 /etc/hosts 条目及其 IP,并且还在 /etc/resolv.conf 文件中添加了 127.0.0.1 的名称服务器。
目录 /etc/consul.d/ 保存我的服务配置文件。下面是一个例子:
{
"service": {
"name": "stackoverflow",
"tags": [
"example"
],
"port": 5000
}
}
现在,一旦我的 consul 代理运行,我就可以通过 dig 命令或 http api 请求检查具有 consul 代理(服务器/客户端)的任何主机的服务,如下所示:
curl http://stackoverflow.service.consul:80/api/v1/ping
{"success":true,"message":"pong"}
For DNS:
dig @127.0.0.1 -p 53 stackoverflow.service.consul
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.55.amzn1 <<>> @127.0.0.1 -p 53 tracker.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57167
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;tracker.service.consul. IN A
;; ANSWER SECTION:
tracker.service.consul. 0 IN A X.X.X.X
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jul 7 11:29:01 2017
;; MSG SIZE rcvd: 56
希望有帮助并给出一个清晰的想法