我正在尝试让Consul在Docker容器中工作,但是使用Docker for Windows和Linux容器。我正在使用official Consul Docker image。文档说明容器必须使用--net=host
来获得Consul的共识和八卦协议。
据我所知,问题是Docker for Windows使用Linux VM,以及" host"容器不是实际的主机,而是VM。我找不到-bind
,-client
和-advertise
参数(IP地址)的组合,因此:
每当我通过-advertise
在局域网中传递主机IP地址时,我都会在容器中收到这些错误:
2018/04/03 15:15:55 [警告]领事:错误从" linuxkit-00155d02430b"获取服务器健康状况:rpc错误获取客户端:无法获得conn:拨打tcp 127.0.0.1:0->10.241.2.67:8300:connect:无效参数2018/04/03 15:15:56 [警告] consul:错误从" linuxkit-00155d02430b"上下文获取服务器健康状况超过截止日期
此外,其他主机上的其他代理无法连接到该代理。
在该地址上使用-bind
失败 - 我的猜测是,由于容器在Linux VM中,因此主机的地址不是容器的主机地址,因此不能受约束。
我尝试了-bind
,-client
和-advertise
的各种组合,使用0.0.0.0
,127.0.0.1
,10.0.75.2
等地址(地址为Docker虚拟交换机)和主机的IP,但无济于事。
我现在想知道这是否可以实现。我已经尝试了很长一段时间了,我绝望了。任何建议将不胜感激!
我在不使用--net=host
的情况下尝试了整个过程,一切正常。我可以跨主机连接代理,我可以从其他容器化应用程序查询本地代理REST接口...... --net=host
对Consul的运行真的至关重要吗?