1. 拉取镜像

$ docker pull consul


2. 配置第一个Consul

$ docker run -d --name consul1 -v /data:/data --restart=always -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect 2 -ui -bind=0.0.0.0 -client=0.0.0.0


8500 http 端口,用于 http 接口和 Web ui

8300 server rpc 端口,同一数据中心 consul server 之间通过该端口通信

8301 serf lan 端口,同一数据中心 consul client 通过该端口通信

8302 serf wan 端口,不同数据中心 consul server 通过该端口通信

8600 dns 端口,用于服务发现


-bootstrap-expect 2:集群至少两台服务器,才能选举集群 leader,数目一达到,它就会被激活

-ui:运行 Web 控制台

-bind:监听网口,0.0.0.0 表示所有网口,如果不指定默认未 127.0.0.1,则无法和容器通信

-client:限制某些网口可以访问


3. 获取 Consul Server 1 的 ip 地址

$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul1


--输出为 172.17.0.2


4. 启动第二个 consul 服务:consul2, 并加入 consul1(使用 join 命令)

$ docker run -d --name consul2 -v /data:/data --restart=always -p 8501:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2


5. 启动第三个 consul 服务:consul3,并加入 consul1

$ docker run -d --name consul3 -v /data:/data --restart=always -p 8502:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2

(如果需要创建Client模式,只需要把以上命令中的 -server 去掉)


此时,Consul 集群已完成部署,可以浏览器访问: http://ip:8500 | 8501 | 8502 查看集群状态("|"=或者)


--以上创建的都是 Server 模式,Agent 可以运行为 Server 或 Client 模式,每个数据中心至少必须拥有一台 Server


--建议在一个集群中有 3 或者 5 个 Server(因为部署单一的server,在出现失败时会不可避免的造成数据丢失)


--Server 模式和 Client 模式的功能是一样的,唯一有区别的就是Server模式会把所有的信息持久化到本地,这样遇到故障,信息是可以被保留的



6. 查看容器状态

$ docker ps     #查看docker正在运行的容器  

$ docker ps -a  #查看docker我们构建生成的容器  



7. docker Kill Consul 集群

$ docker kill consul1


8. 启动与停止 Consul 集群

$ docker start consul1

$ docker stop consul2


9. 删除 Consul 集群

$ docker rm consul1