14
2

More than 5 years have passed since last update.

Goのelasticパッケージを利用してDocker上のElasticsearchに接続する

Last updated at Posted at 2017-09-02

ハマった点

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分で解決できたら嬉しい。

14
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
2