質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

10959閲覧

Docker+Elasticsearch+pythonでhostname接続できない

borialis14

総合スコア16

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/08/29 07:42

編集2019/08/29 07:50

前提・実現したいこと

Docker上でElasticSearchを組み込んでpythonでindex作成・Search等しようとしています。
Elasticsearch起動後、pythonでアクセス試みたら以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

{"status": "faild", "message": "ConnectionError(<urllib3.connection.HTTPConnection object at 0x7f8524dbbfd0>: Failed to establish a new connection: [Errno 111] Connection refused) caused by: NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7f8524dbbfd0>: Failed to establish a new connection: [Errno 111] Connection refused)", "command": {"type": "search", "args": []}, "error": "ConnectionError", "traceback": [" File "./app/main.py", line 11, in run\n res = run_command(payload)\n", " File "/usr/src/app/app/command_runner.py", line 36, in run_command\n command = import_module('.' + command_path, 'app')\n", " File "/usr/local/lib/python3.6/importlib/init.py", line 126, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n", " File "<frozen importlib._bootstrap>", line 994, in _gcd_import\n", " File "<frozen importlib._bootstrap>", line 971, in _find_and_load\n", " File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked\n", " File "<frozen importlib._bootstrap>", line 665, in _load_unlocked\n", " File "<frozen importlib._bootstrap_external>", line 678, in exec_module\n", " File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed\n",

該当のソースコード

docker-compose.yml

version: "3" services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1 container_name: es01 environment: - node.name=es01 - discovery.type=single-node - bootstrap.memory_lock=true - "ES_JAVA_OPTS: -Xms750m -Xmx750m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata01:/usr/share/elasticsearch/data ports: - "9200:9200" networks: - esnet volumes: esdata01: driver: local networks: esnet:

search.py

from elasticsearch import Elasticsearch def search(word): #es = Elasticsearch() #ok #es = Elasticsearch([{'host': 'localhost', 'port': '9200'}]) #ok #es = Elasticsearch([{'host': '127.0.0.1', 'port': '9200'}]) #ok es = Elasticsearch([{'host': 'es01', 'port': '9200'}]) #NG res = es.search(index="test_index", body={"query": {"multi_match": {"fields": [ "result.name", "result.alphabeticalName"],"query": word}}}) print(res) if len(sys.argv) > 1: word = sys.argv[1] search(word) else: print("plz input keyword")

試したこと

Dockerの外で上記search.pyを実行すると、下記3行の書き方では求める結果が得られます。
es = Elasticsearch()
es = Elasticsearch([{'host': 'localhost', 'port': '9200'}])
es = Elasticsearch([{'host': '127.0.0.1', 'port': '9200'}])
ただ、下記の記述では上述のエラーが返ってきます。
es = Elasticsearch([{'host': 'es01', 'port': '9200'}]) #NG

本来の目的で言うと、Docker内に配置したpythonを下記コマンドのように動かしたいのですが、
docker-compose run test ./bin/test search keyword
この書き方をするとlocalhost:9200ではアクセスできず、
参考サイトをみる限りhostnameにアクセスすべき、とあるので
試行錯誤しておりますが未だエラー解決できておりません。
参考)
https://github.com/elastic/elasticsearch-py/issues/715

一週間1mmも進んでいなくてもはや吐きそうになってきました…
どなたか救いの手をどうぞよろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

cf)http://localhost:9200/にブラウザでアクセスすると以下表示されます。
{
"name" : "es01",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "cxGKY5DvS26sQTbQ5FN_3A",
"version" : {
"number" : "7.1.1",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "7a013de",
"build_date" : "2019-05-23T14:04:00.380842Z",
"build_snapshot" : false,
"lucene_version" : "8.0.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

es01のIPアドレスがわからないため接続エラーになっているものと思われます。es01というホスト名がどのIPアドレスに紐づくのか指定しましょう(hostsファイルに書くとか)

一般的に、ホスト自身のループバックアドレスは127.0.0.1であり、127.0.0.1はlocalhostに紐づいているので、上述の指定方法はOKになります

投稿2019/08/29 07:57

yukky1201

総合スコア2751

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

borialis14

2019/08/29 08:51

ご回答ありがとうございます。 もしご存知でしたら教えてください。docker-composeで'localhost'や'127.0.0.1'にアクセスしようとするとエラーがでてしまうのはどうしてなのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問