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_IPdocker run -d -p 8500:8500 --name node4 -h node4 consul agent -join $JOIN_IP -ui -client=0.0.0.0 -bind=127.0.0.12016/12/19 18:47:06 [ERR] memberlist: Failed to send ping: write udp 127.0.0.1:8301->172.17.0.3:8301: sendto: invalid argument
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
In the UI, nodes 1-3 look fine but node4 is in error state, the Serf Health Status says "Agent not live or unreachable".
"moby" (the docker for mac host VM) also shows up in the node list now, no services, also in error state.
Just for kicks I ran registrator; it added in a service entry for consul:8500 on node4 and when I ran a redis container it added it in to node4 (also in failing state).
--net=host doesn't work as you might expect on docker for mac, it only exposes into the VM host not the actual Mac itself. I tried adding -p <everything else>m no real difference except that registrator shows a bunch more ports worth of service failing health check.
In the UI node4 seems to go green then orange and back again. In e.g. node1's docker log it is thrashing on it:
2016/12/19 20:00:43 [ERR] memberlist: Failed TCP fallback ping: EOF
2016/12/19 20:00:44 [WARN] memberlist: Got ping for unexpected node 'node4' from=127.0.0.1:8301
2016/12/19 20:00:46 [INFO] serf: EventMemberFailed: node4 127.0.0.1
2016/12/19 20:00:46 [INFO] consul: member 'node4' failed, marking health critical
2016/12/19 20:00:46 [INFO] memberlist: Suspect node4 has failed, no acks received
2016/12/19 20:01:09 [INFO] serf: attempting reconnect to moby 127.0.0.1:8301
2016/12/19 20:01:09 [INFO] serf: EventMemberJoin: node4 127.0.0.1
2016/12/19 20:01:09 [INFO] consul: member 'node4' joined, marking health alive
2016/12/19 20:01:09 [WARN] memberlist: Got ping for unexpected node 'node4' from=127.0.0.1:8301
2016/12/19 20:01:10 [WARN] memberlist: Got ping for unexpected node 'node4' from=127.0.0.1:8301
2016/12/19 20:01:11 [WARN] memberlist: Got ping for unexpected node node4 from=127.0.0.1:58984
2016/12/19 20:01:11 [ERR] memberlist: Failed TCP fallback ping: EOF
2016/12/19 20:01:11 [INFO] memberlist: Suspect node4 has failed, no acks received
2016/12/19 20:01:13 [WARN] memberlist: Got ping for unexpected node 'node4' from=127.0.0.1:8301
2016/12/19 20:01:13 [WARN] memberlist: Got ping for unexpected node 'node4' from=127.0.0.1:8301
2016/12/19 20:01:15 [INFO] serf: EventMemberFailed: node4 127.0.0.1
2016/12/19 20:01:15 [INFO] consul: member 'node4' failed, marking health critical
2016/12/19 20:01:39 [INFO] serf: attempting reconnect to node4 127.0.0.1:8301
2016/12/19 20:01:39 [INFO] serf: EventMemberJoin: node4 127.0.0.1
2016/12/19 20:01:39 [INFO] consul: member 'node4' joined, marking health alive
2016/12/19 20:01:40 [WARN] memberlist: Got ping for unexpected node 'node4' from=127.0.0.1:8301
2016/12/19 20:01:41 [WARN] memberlist: Got ping for unexpected node node4 from=127.0.0.1:59000
2016/12/19 20:01:41 [ERR] memberlist: Failed TCP fallback ping: EOF
2016/12/19 20:01:41 [INFO] memberlist: Suspect node4 has failed, no acks received
2016/12/19 20:01:41 [WARN] memberlist: Got ping for unexpected node 'node4' from=127.0.0.1:8301
2016/12/19 20:01:41 [WARN] memberlist: Got ping for unexpected node 'node4' from=127.0.0.1:8301
2016/12/19 20:01:44 [WARN] memberlist: Got ping for unexpected node 'node4' from=127.0.0.1:8301
2016/12/19 20:01:45 [WARN] memberlist: Got ping for unexpected node 'node4' from=127.0.0.1:8301
2016/12/19 20:01:45 [WARN] memberlist: Got ping for unexpected node 'node4' from=127.0.0.1:8301
2016/12/19 20:01:46 [WARN] memberlist: Got ping for unexpected node node4 from=127.0.0.1:59010
2016/12/19 20:01:46 [ERR] memberlist: Failed TCP fallback ping: EOF
2016/12/19 20:01:46 [INFO] memberlist: Marking node4 as failed, suspect timeout reached (0 peer confirmations)
2016/12/19 20:01:46 [INFO] memberlist: Suspect node4 has failed, no acks received
2016/12/19 20:01:46 [INFO] serf: EventMemberFailed: node4 127.0.0.1
2016/12/19 20:01:46 [INFO] consul: member 'node4' failed, marking health critical
Ideas? My end goal is to prototype out a consul/registrator/consul-template cluster locally for evaluation and, ideally, larger scale prod deployment on AWS/ECS, primarily for config store but eventually for service discovery too. But I need to get it running locally enough to figure it out...
Thanks,
Ernest
Try using the 0.7.2 release of Consul and start the agent using the following (beta as of 0.7.2, final by 0.8.0) syntax:
$ docker run -d -p 8500:8500 --name node4 -h node4 consul agent -join $JOIN_IP -ui -client=0.0.0.0 -bind='{{ GetPrivateIP }}'The change being the argument to
-bindwhere Consul will now render out the IP address of a private IP address. The other template parameters are documented in thehashicorp/go-sockaddr.