arm64v8/consulConsul是一个分布式、高可用且支持多数据中心的工具,提供服务发现、配置管理和编排能力,适用于构建服务导向架构。
重要提示:自Consul 1.16起,官方将停止在Dockerhub发布
consul镜像,仅发布Verified Publisher镜像。用户应从hashicorp/consul拉取镜像,而非consul。
在Docker环境中部署Consul时,通常每个主机运行一个Consul代理容器,与Docker守护进程共存。关键架构要点:
--net=host,因为Consul的共识和gossip协议对延迟和丢包敏感,其他网络模式可能引入不必要的网络层/consul/data卷),客户端节点可选择性持久化repos/consul/ directory| 环境变量 | 描述 |
|---|---|
CONSUL_LOCAL_CONFIG | JSON格式的本地配置,如{"leave_on_terminate": true} |
CONSUL_BIND_INTERFACE | 指定绑定网络接口名称,自动获取该接口IP作为集群地址 |
CONSUL_CLIENT_INTERFACE | 指定客户端接口名称,自动获取该接口IP作为客户端地址 |
CONSUL_ALLOW_PRIVILEGED_PORTS | 允许绑定特权端口(如53),需配合-dns-port使用 |
/consul/data:Consul持久化数据目录(服务器节点必备)/consul/config:配置文件目录,容器启动时会加载该目录下的所有配置文件开发模式下Consul以服务器模式运行,数据仅存于内存,适合测试:
consoledocker run -d --name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 consul
创建3节点开发集群示例:
console# 启动第一个节点 docker run -d --name=consul-1 -e CONSUL_BIND_INTERFACE=eth0 consul agent -dev -client=0.0.0.0 # 获取第一个节点IP CONSUL_1_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' consul-1) # 启动第二个节点并加入集群 docker run -d --name=consul-2 -e CONSUL_BIND_INTERFACE=eth0 consul agent -dev -client=0.0.0.0 -join=$CONSUL_1_IP # 启动第三个节点并加入集群 docker run -d --name=consul-3 -e CONSUL_BIND_INTERFACE=eth0 consul agent -dev -client=0.0.0.0 -join=$CONSUL_1_IP # 查看集群成员 docker exec -t consul-1 consul members
注意:开发模式下数据不会持久化,容器停止后数据丢失,不可用于生产环境。
客户端节点负责转发请求至服务器节点,运行在每个主机上:
consoledocker run -d \ --net=host \ -e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' \ consul agent \ -bind=<主机外部IP> \ -retry-join=<服务器节点IP>
参数说明:
--net=host:使用主机网络模式leave_on_terminate:容器终止时自动离开集群-bind:指定集群通信IP(主机外部IP)-retry-join:指定服务器节点IP,支持重试连接服务器节点维护集群状态,建议部署3-5个确保高可用:
consoledocker run -d \ --net=host \ -v /path/to/consul/data:/consul/data \ -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \ consul agent \ -server \ -bind=<主机外部IP> \ -retry-join=<其他服务器节点IP> \ -bootstrap-expect=<预期服务器节点数>
参数说明:
-server:启用服务器模式-bootstrap-expect:指定集群中预期的服务器节点数,达到该数量时自动引导集群-v /path/to/consul/data:/consul/data:持久化数据卷,服务器节点必须配置Consul默认DNS端口为8600,可配置为53端口便于使用:
consoledocker run -d \ --net=host \ -e 'CONSUL_ALLOW_PRIVILEGED_PORTS=' \ consul agent \ -dns-port=53 \ -recursor=8.8.8.8 \ -bind=<主机外部IP> \ -client=0.0.0.0
其他容器使用Consul DNS:
console# 假设Consul运行在主机IP 192.168.1.100 docker run -it --dns=192.168.1.100 ubuntu sh -c "apt-get update && apt-get install -y dnsutils && dig consul.service.consul"
通过HTTP API注册服务:
bash# 向本地Consul代理注册服务 curl -X PUT http://localhost:8500/v1/agent/service/register -d '{ "Name": "web", "ID": "web1", "Address": "192.168.1.101", "Port": 80, "Check": { "HTTP": "[***]", "Interval": "10s" } }'

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务