Jagatveer Singh
Jagatveer Singh

Reputation: 195

consul container exits with a protocol version error

I am trying to make a container for consul and it keeps failing with this output, funny, I don't really think it is an error

Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

following is the command I am using:

docker container run --net host --name consul-server -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' -e CONSUL_BIND_INTERFACE='eth0' consul agent -server -client 0.0.0.0 -dns-port 53 -bootstrap-expect 1 -ui -datacenter dc1 -v "/var/lib/consul:/consul/data" -data-dir /var/lib/consul

It is a single node fresh installation with latest version from registry, so there is no upgrade or version mismatch with any agent/client happening here.

Upvotes: 4

Views: 376

Answers (2)

Jagatveer Singh
Jagatveer Singh

Reputation: 195

@Robert Alright, I think we also went a bit off topic here. The real issue is the message it shows and exits immidiately after that.

I tried your example and it gives the same message/error (don't think it is an error though)

[root@ip-X-X-X-X user]# docker container run --net host --name consul-server -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' -e CONSUL_BIND_INTERFACE='eth0' consul agent -server -client 0.0.0.0 -dns-port 53 -bootstrap-expect 1 -ui -datacenter dc1 -v "/var/lib/consul:/consul/data" -data-dir /var/lib/consul
==> Found address 'X.X.X.X' for interface 'eth0', setting bind option...
Consul v0.8.5
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
[root@ip-X-X-X-X user]# docker container ls | grep consul-server
[root@ip-10-201-14-34 user]#

Same for recursors example:

[[email protected] user]# docker container run --net host --name consul-server -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' -e CONSUL_BIND_INTERFACE='eth0' consul agent -server -client 0.0.0.0 -dns-port 53 -bootstrap-expect 1 -ui -datacenter dc1 -v "/var/lib/consul:/consul/data" -data-dir /var/lib/consul -recursers 8.8.8.8
==> Found address 'X.X.X.X' for interface 'eth0', setting bind option...
Consul v0.8.5
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
[root@ip-X-X-X-X user]# docker container ls | grep consul-server
[root@ip-10-201-14-34 user]#

Upvotes: 0

Robert
Robert

Reputation: 36773

Two things to fix. First, the -v volume argument must be for docker command, not for consul command. Move it to the right place:

docker container run -v "/consul/data:/var/lib/consul" -data-dir /var/lib/consul --net host --name consul-server -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' -e CONSUL_BIND_INTERFACE='eth0' consul agent -server -client 0.0.0.0 -dns-port 53 -bootstrap-expect 1 -ui -datacenter dc1 

Also invert them (they are /host/dir:/container/dir)

Second, by default Consul can't listen to privileged ports (i.e. 53). See this: https://www.consul.io/docs/guides/forwarding.html, so remove the -dns-port 53 and implement any approach that they recommends:

docker container run -v "/consul/data:/var/lib/consul" -data-dir /var/lib/consul --net host --name consul-server -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' -e CONSUL_BIND_INTERFACE='eth0' consul agent -server -client 0.0.0.0 -bootstrap-expect 1 -ui -datacenter dc1 

I recommend the DNSMasq setup, it is easy to implement.

Upvotes: 1

Related Questions