【问题标题】:consul container exits with a protocol version error领事容器退出并出现协议版本错误
【发布时间】:2017-07-11 12:51:45
【问题描述】:

我正在尝试为 consul 创建一个容器,但输出一直失败,有趣的是,我真的不认为这是一个错误

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

以下是我正在使用的命令:

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

这是一个单节点全新安装,带有来自注册表的最新版本,因此这里发生的任何代理/客户端都没有升级或版本不匹配。

【问题讨论】:

    标签: docker consul service-discovery


    【解决方案1】:

    有两件事要解决。首先,-v 卷参数必须用于docker 命令,而不是consul 命令。将其移动到正确的位置:

    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 
    

    同时反转它们(它们是 /host/dir:/container/dir)

    其次,默认情况下,Consul 不能监听特权端口(即 53)。看到这个:https://www.consul.io/docs/guides/forwarding.html,所以删除-dns-port 53并实施他们推荐的任何方法:

    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 
    

    我推荐DNSMasq setup,它很容易实现。

    【讨论】:

    • 感谢您抽出宝贵时间回复。实际上,我确实查看了文档并尝试遵循递归方法。值得一提的是,默认情况下,Consul 不会解析 .consul 之外的 DNS 记录。 zone 除非设置了递归配置选项。因此,我在将原始问题粘贴为 -recursors 8.8.8.8 的命令中添加了这一点,但这也无济于事。有什么帮助吗?我只需要将所有配置保存在容器中。
    【解决方案2】:

    @Robert 好吧,我想我们在这里也有点跑题了。真正的问题是它显示的信息并在此之后立即退出。

    我尝试了您的示例,它给出了相同的消息/错误(但不要认为这是一个错误)

    [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]#
    

    递归示例也是如此:

    [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 -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]#
    

    【讨论】:

    • 你还在使用--dns-port=53,我说这是问题
    • 这里没有 --dns-port=53 并且仍然是同样的问题。 ` MacBook-Pro-2:.ssh jagatveer$ 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 -bootstrap-expect 1 -ui -datacenter dc1 -v "/var/lib/consul:/consul/data" -data-dir /var/lib/consul Consul v0.7.0 协议2默认说,理解2到 3(与兼容的代理交谈时代理将自动使用 >2 协议)`
    • 请查看我的回答。我也说过 -v 在错误的地方......
    猜你喜欢
    • 2021-03-23
    • 2020-04-23
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    相关资源
    最近更新 更多