ハマった点
goでelasticsearchに接続する際にolivere/elastic プラグインを利用したけれど、ローカルのDockerで起動したelasticsearchに接続できなかったので調べると、SniffingをOFFにしなければいけないことがわかった。ソースはここにあるので気になる方はご覧ください。
簡単に言うと、docker containerにアクセスする時は、 127.0.0.1:9200
=> 172.0.0.2:9200(例)
みたいにIPがnatされているので、dockerからreturnされるIPは172.0.0.2:9200
になってて外からアクセスできない。SniffingをOFFにしないと172.0.0.2:9200
に接続しに行こうとして接続できないのでエラーとなる。
環境準備
実行環境
- Mac OS
- go1.9
- docker 17.06.1-ce
elasticsearch (Dockerコンテナー)
$ docker pull docker.elastic.co/elasticsearch/elasticsearch:5.5.2
$ docker run -it --rm -p 9200:9200 -p 9300:9300 \
-e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" \
-e "xpack.security.enabled=false" --name news_search \
-d docker.elastic.co/elasticsearch/elasticsearch:5.5.2
elasticパッケージダウンロード
go get gopkg.in/olivere/elastic.v5
デフォルトのコード実行
コード内容
main.go
//client, err := elastic.NewClient()
_, err :=elastic.NewClient()
if err != nil {
panic(err)
}
エラー内容
2017/09/02 19:07:17 http: panic serving [::1]:55010: no active connection found: no Elasticsearch node available
SniffingをOFFにする
コード内容
main.go
//client, err := elastic.NewClient(elastic.SetSniff(false))
_, err :=elastic.NewClient(elastic.SetSniff(false))
if err != nil {
// Handle error
panic(err)
}
fmt.Println("connection OK!!")
これだとエラーにならず、接続ができる。
このエラーにハマった人がこの記事をみて5分で解決できたら嬉しい。