问题:
使用Golang客户端连接docker中es报错:
no active connection found: no Elasticsearch node available
使用的第三方库:"github.com/olivere/elastic"
解决办法:
参考Docker No Elastic Node Aviable
关闭sniff模式;或者设置es的地址为publish_address
地址
Golang代码设置sniff 为false
client, err := elastic.NewClient(elastic.SetSniff(false), elastic.SetURL(url))
注意:当ES服务器监听(publish_address )使用内网服务器IP,而访问(bound_addresses )使用外网IP时,不要设置client.transport.sniff为true。不设置client.transport.sniff时,默认为false(关闭客户端去嗅探整个集群的状态)。因为在自动发现时会使用内网IP进行通信,导致无法连接到ES服务器。因此此时需要直接使用addTransportAddress方法把集群中其它机器的ip地址加到客户端中。
原因:
它必须与嗅探的工作方式有关(请参阅Wiki中的详细信息)。 节点IP可能无法从您的应用程序访问。启用嗅探后,它将从http.publish_address中检索节点IP。 这似乎是可以路由的
查看publish_address: