
Consul是一款用于服务发现和配置的工具,具有分布式、高可用和极高可扩展性的特点。
本Docker容器已配置多项功能,便于快速运行Consul。
服务发现 - Consul使服务能够轻松注册自身,并通过DNS或HTTP接口发现其他服务。外部服务(如SaaS提供商)也可注册。
健康检查 - 健康检查功能使Consul能快速向运维人员告警集群中的问题,与服务发现集成可防止流量路由到不健康主机,并支持服务级别的熔断。
键值存储 - 灵活的键值存储可用于存储动态配置、功能标志、协调、 leader选举等。简单的HTTP API使其可在任何地方轻松使用。
多数据中心 - Consul具备数据中心感知能力,无需复杂配置即可支持任意数量的区域。
适用于微服务架构中的服务注册与发现、动态配置管理、容器化应用的服务协调、分布式系统的健康监控等场景,尤其适合需要高可用性和可扩展性的分布式环境。
bashdocker run -d -h node1 --name consul nimmis/consul server1
以上命令启动一个主机名为node1的单服务器,所有端口仅本地可访问。使用以下命令获取容器IP:
bashCONSUL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' consul)
可通过查看日志确认启动是否成功:
bashdocker logs -f consul
日志输出示例:
==> WARNING: BootstrapExpect Mode is specified as 1; this is the same as Bootstrap mode. ==> WARNING: Bootstrap mode enabled! Do not enable unless necessary ==> Starting Consul agent... ==> Starting Consul agent RPC... ==> Consul agent running! Version: 'v0.7.2' Node name: 'ed1830c12a1d' Datacenter: 'dc' Server: true (bootstrap: true) Client Addr: 0.0.0.0 (HTTP: 8500, HTTPS: -1, DNS: 8600, RPC: 8400) Cluster Addr: 172.17.0.16 (LAN: 8301, WAN: 8302) Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false Atlas: <disabled> ==> Log data will now stream in as it occurs: 2017/01/11 18:47:08 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:172.17.0.16:8300 Address:172.17.0.16:8300}] 2017/01/11 18:47:08 [INFO] raft: Node at 172.17.0.16:8300 [Follower] entering Follower state (Leader: "") 2017/01/11 18:47:08 [INFO] serf: EventMemberJoin: ed1830c12a1d 172.17.0.16 2017/01/11 18:47:08 [INFO] consul: Adding LAN server ed1830c12a1d (Addr: tcp/172.17.0.16:8300) (DC: dc) 2017/01/11 18:47:08 [INFO] serf: EventMemberJoin: ed1830c12a1d.dc 172.17.0.16 2017/01/11 18:47:08 [INFO] consul: Adding WAN server ed1830c12a1d.dc (Addr: tcp/172.17.0.16:8300) (DC: dc) 2017/01/11 18:47:15 [ERR] agent: failed to sync remote state: No cluster leader 2017/01/11 18:47:17 [WARN] raft: Heartbeat timeout from "" reached, starting election 2017/01/11 18:47:17 [INFO] raft: Node at 172.17.0.16:8300 [Candidate] entering Candidate state in term 2 2017/01/11 18:47:17 [INFO] raft: Election won. Tally: 1 2017/01/11 18:47:17 [INFO] raft: Node at 172.17.0.16:8300 [Leader] entering Leader state 2017/01/11 18:47:17 [INFO] consul: cluster leadership acquired 2017/01/11 18:47:17 [INFO] consul: New leader elected: ed1830c12a1d 2017/01/11 18:47:17 [INFO] consul: member 'ed1830c12a1d' joined, marking health alive 2017/01/11 18:47:20 [INFO] agent: Synced service 'consul'
按CTRL+C可中止日志查看。
可通过DNS获取运行Consul的服务节点的IP信息。
获取服务信息
要获取服务运行的IP和端口,查询时需指定端口8600(Consul默认DNS端口):
bashdig @$CONSUL_IP -p 8600 consul.service.consul
返回示例:
; <<>> DiG 9.10.3-P4-Ubuntu <<>> @172.17.0.16 -p 8600 consul.service.consul ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5163 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;consul.service.consul. IN A ;; ANSWER SECTION: consul.service.consul. 0 IN A 172.17.0.16 ;; Query time: 0 msec ;; SERVER: 172.17.0.16#8600(172.17.0.16) ;; WHEN: Wed Jan 11 19:47:29 CET 2017 ;; MSG SIZE rcvd: 55
使用SRV记录获取端口信息:
bashdig @$CONSUL_IP -p 8600 consul.service.consul SRV
返回示例:
; <<>> DiG 9.10.3-P4-Ubuntu <<>> @172.17.0.16 -p 8600 consul.service.consul SRV ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37039 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;consul.service.consul. IN SRV ;; ANSWER SECTION: consul.service.consul. 0 IN SRV 1 1 8300 ed1830c12a1d.node.dc.consul. ;; ADDITIONAL SECTION: ed1830c12a1d.node.dc.consul. 0 IN A 172.17.0.16 ;; Query time: 0 msec ;; SERVER: 172.17.0.16#8600(172.17.0.16) ;; WHEN: Wed Jan 11 19:56:29 CET 2017 ;; MSG SIZE rcvd: 96
可通过HTTP访问服务和节点信息,输出格式为JSON。
获取所有活动Consul节点
bashcurl -s http://$CONSUL_IP:8500/v1/catalog/nodes?pretty
返回示例:
json[ { "Node": "node1", "Address": "172.17.0.16", "TaggedAddresses": { "lan": "172.17.0.16", "wan": "172.17.0.16" }, "CreateIndex": 4, "ModifyIndex": 5 } ]
获取所有活动Consul服务
bashcurl -s http://$CONSUL_IP:8500/v1/catalog/services?pretty
返回示例:
json{ "consul": [] }
获取node1节点的健康状态
bashcurl -s http://$CONSUL_IP:8500/v1/health/node/node1?pretty
返回node1节点的健康状态:
json[ { "Node": "node1", "CheckID": "serfHealth", "Name": "Serf Health Status", "Status": "passing", "Notes": "", "Output": "Agent alive and reachable", "ServiceID": "", "ServiceName": "", "CreateIndex": 4, "ModifyIndex": 4 } ]
获取consul服务的健康状态
bashcurl -s http://$CONSUL_IP:8500/v1/health/service/consul?pretty
返回consul服务的健康状态:
json[ { "Node": { "Node": "node1", "Address": "172.17.0.16", "TaggedAddresses": { "lan": "172.17.0.16", "wan": "172.17.0.16" }, "CreateIndex": 4, "ModifyIndex": 5 }, "Service": { "ID": "consul", "Service": "consul", "Tags": [], "Address": "", "Port": 8300, "EnableTagOverride": false, "CreateIndex": 4, "ModifyIndex": 5 }, "Checks": [ { "Node": "node1", "CheckID": "serfHealth", "Name": "Serf Health Status", "Status": "passing", "Notes": "", "Output": "Agent alive and reachable", "ServiceID": "", "ServiceName": "", "CreateIndex": 4, "ModifyIndex": 4 } ] } ]
键值存储可用于保存动态配置、辅助服务协调、构建leader选举等。
使用curl写入值,例如将值yellow写入键webcluster/status:
bashcurl -s -X PUT -d 'yellow' http://$CONSUL_IP:8500/v1/kv/webcluster/status
命令返回true表示成功。
使用GET方法读取值,URL与写入时相同:
bashcurl -s -X GET http://$CONSUL_IP:8500/v1/kv/webcluster/status?pretty
返回示例:
json[ { "LockIndex": 0, "Key": "webcluster/status", "Flags": 0, "Value": "eWVsbG93", "CreateIndex": 113, "ModifyIndex": 113 } ]
Value字段显示的是base64编码值,通过base64解码可获取原始值:
bashecho "eWVsbG93" | base64 -d
输出:yellow
... 更多信息待补充 ...
如果对本镜像有任何问题或疑问,请通过https://github.com/nimmis/docker-consul/issues "GitHub issue"提交工单联系我们:
cat /etc/BUILDS/***的输出欢迎贡献新功能、修复或更新(无论大小),我们始终乐于接收拉取请求,并会尽快处理。
不同版本通过TAG区分,可用版本为nimmis/consul:
| Tag | Consul版本 | 大小 |
|---|---|---|
| latest | latest/0.8.0 | |
| 0.8 | 0.8.0 | |
| 0.8.0 | 0.8.0 | |
| 0.7 | 0.7.5 | |
| 0.7.5 | 0.7.5 | |
| 0.7.3 | 0.7.3 | |
| 0.7.2 | 0.7.2 | |
| 0.7.1 | 0.7.1 | |
| 0.7.0 | 0.7.0 | |
| 0.6 | 0.6.4 | |
| 0.6.1 | 0.6.1 | [
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务