在 OSX docker 中访问领事 UI 运行
Accessing consul UI running in docker on OSX
我遇到了类似于 的问题,但我无法正确组合网络选项。
我正在 OSX 使用 Docker 用于 Mac,而不是旧的 docker-machine 东西,以及官方领事 docker 图像,不是 progrium/docker 图片。
我可以使用
启动 3 节点服务器集群
docker run -d --name node1 -h node1 consul agent -server -bootstrap-expect 3
JOIN_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1)"
docker run -d --name node2 -h node2 consul agent -server -join $JOIN_IP
docker run -d --name node3 -h node3 consul agent -server -join $JOIN_IP
到目前为止一切顺利,它们相互连接并且工作正常。现在我想启动一个代理,并通过它查看UI。
我尝试了一堆-client 和-bind 的组合,这似乎是所有这一切的关键。使用
docker run -d -p 8500:8500 --name node4 -h node4 consul agent -join $JOIN_IP -ui -client=0.0.0.0 -bind=127.0.0.1
我可以通过http://localhost:8500/ui/获取UI,consul成员显示所有节点:
docker exec -t node4 consul members
Node Address Status Type Build Protocol DC
node1 172.17.0.2:8301 alive server 0.7.1 2 dc1
node2 172.17.0.3:8301 alive server 0.7.1 2 dc1
node3 172.17.0.4:8301 alive server 0.7.1 2 dc1
node4 127.0.0.1:8301 alive client 0.7.1 2 dc1
但并不尽如人意;在 UI 它告诉我 node4 是 "Agent not live or unreachable" 并且在它的日志中有一大堆
2016/12/19 18:18:13 [ERR] memberlist: Failed to send ping: write udp 127.0.0.1:8301->172.17.0.4:8301: sendto: invalid argument
我已经尝试了很多其他组合 - --net=host 只是在 OSX.
上搞砸了
如果我尝试 -bind=我盒子的外部 IP,它不会启动,
Error starting agent: Failed to start Consul client: Failed to start lan serf: Failed to create memberlist: Failed to start TCP listener. Err: listen tcp 192.168.1.5:8301: bind: cannot assign requested address
我还尝试映射所有其他端口,包括 udp 端口 (-p 8500:8500 -p 8600:8600 -p 8400:8400 -p 8300-8302:8300-8302 -p 8600:8600/udp -p 8301-8302:8301-8302/udp) 但这并没有改变任何东西。
如何将节点加入此集群并查看 UI?
尝试使用 0.7.2 版本的 Consul 并使用以下语法启动代理(从 0.7.2 开始测试,最终由 0.8.0 开始):
$ docker run -d -p 8500:8500 --name node4 -h node4 consul agent -join $JOIN_IP -ui -client=0.0.0.0 -bind='{{ GetPrivateIP }}'
变化是 -bind
的参数,Consul 现在将呈现私有 IP 地址的 IP 地址。其他模板参数记录在 hashicorp/go-sockaddr
.
我遇到了类似于
我正在 OSX 使用 Docker 用于 Mac,而不是旧的 docker-machine 东西,以及官方领事 docker 图像,不是 progrium/docker 图片。
我可以使用
启动 3 节点服务器集群docker run -d --name node1 -h node1 consul agent -server -bootstrap-expect 3
JOIN_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1)"
docker run -d --name node2 -h node2 consul agent -server -join $JOIN_IP
docker run -d --name node3 -h node3 consul agent -server -join $JOIN_IP
到目前为止一切顺利,它们相互连接并且工作正常。现在我想启动一个代理,并通过它查看UI。
我尝试了一堆-client 和-bind 的组合,这似乎是所有这一切的关键。使用
docker run -d -p 8500:8500 --name node4 -h node4 consul agent -join $JOIN_IP -ui -client=0.0.0.0 -bind=127.0.0.1
我可以通过http://localhost:8500/ui/获取UI,consul成员显示所有节点:
docker exec -t node4 consul members
Node Address Status Type Build Protocol DC
node1 172.17.0.2:8301 alive server 0.7.1 2 dc1
node2 172.17.0.3:8301 alive server 0.7.1 2 dc1
node3 172.17.0.4:8301 alive server 0.7.1 2 dc1
node4 127.0.0.1:8301 alive client 0.7.1 2 dc1
但并不尽如人意;在 UI 它告诉我 node4 是 "Agent not live or unreachable" 并且在它的日志中有一大堆
2016/12/19 18:18:13 [ERR] memberlist: Failed to send ping: write udp 127.0.0.1:8301->172.17.0.4:8301: sendto: invalid argument
我已经尝试了很多其他组合 - --net=host 只是在 OSX.
上搞砸了如果我尝试 -bind=我盒子的外部 IP,它不会启动,
Error starting agent: Failed to start Consul client: Failed to start lan serf: Failed to create memberlist: Failed to start TCP listener. Err: listen tcp 192.168.1.5:8301: bind: cannot assign requested address
我还尝试映射所有其他端口,包括 udp 端口 (-p 8500:8500 -p 8600:8600 -p 8400:8400 -p 8300-8302:8300-8302 -p 8600:8600/udp -p 8301-8302:8301-8302/udp) 但这并没有改变任何东西。
如何将节点加入此集群并查看 UI?
尝试使用 0.7.2 版本的 Consul 并使用以下语法启动代理(从 0.7.2 开始测试,最终由 0.8.0 开始):
$ docker run -d -p 8500:8500 --name node4 -h node4 consul agent -join $JOIN_IP -ui -client=0.0.0.0 -bind='{{ GetPrivateIP }}'
变化是 -bind
的参数,Consul 现在将呈现私有 IP 地址的 IP 地址。其他模板参数记录在 hashicorp/go-sockaddr
.