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

Ern*_*ler 7 macos docker consul

我有一个类似于如何从外部访问consul UI的问题,但我无法使网络选项组合正常工作.

我在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
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都很好,他们彼此联系并且工作正常.现在我想启动一个代理,并通过它查看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
Run Code Online (Sandbox Code Playgroud)

我可以通过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
Run Code Online (Sandbox Code Playgroud)

但一切都不顺利; 在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
Run Code Online (Sandbox Code Playgroud)

我尝试过其他一些组合 - --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
Run Code Online (Sandbox Code Playgroud)

我也尝试映射所有其他端口,包括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?

Sea*_*ean 10

尝试使用Consul的0.7.2版本并使用以下内容启动代理(beta版本为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 }}'

此更改是-bindConsul现在将呈现私有IP地址的IP地址的参数.其他模板参数记录在hashicorp/go-sockaddr.