访问在OSX上的docker上运行的consul UI

我有一个问题,类似于如何访问consul UI的外部,但我不能让networking选项的组合工作正确。

我在OSX上使用Docker for Mac,而不是旧的docker-machine,官方的consul 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 

但一切都不好; 在用户界面,它告诉我node4是“代理不活或无法访问”,并在其日志中有一大堆

 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 =主机只是在OSX上的东西了。

如果我尝试绑定=我的箱子的外部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),但没有任何改变。

我如何join到这个集群的节点并查看UI?

尝试使用Consul的0.7.2版本并使用以下语句(0.7.2开始testing,最后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 }}'

这个改变是将Consul -bind到哪里的参数,现在将把私有IP地址的IP地址渲染出来。 其他模板参数logging在hashicorp/go-sockaddr