Dockerコンテナで実行されているPythonスクリプトを使用して(Docker化された)Elasticsearchインデックスを作成するにはどうすればよいですか?

ダビデフィオッコ

スクリプトから呼び出されたPythonクライアントhttps://github.com/elastic/elasticsearch-pyを使用してコンテナー化されたElasticsearchデータベースにインデックスを付けようとしています(コンテナーでも実行されます)。
既存のコードを見るとdocker-compose、私の目的に使用するのに便利なツールのようです。私のdir構造は

docker-compose.yml
indexer/
- Dockerfile
- indexer.py
- requirements.txt
elasticsearch/
- Dockerfile

私のdocker-compose.yml読書

version: '3'

services:
  elasticsearch:
    build: elasticsearch/
    ports: 
      - 9200:9200
    networks:
      - deploy_network
    container_name: elasticsearch

  indexer:
    build: indexer/
    depends_on:
      - elasticsearch
    networks:
      - deploy_network
    container_name: indexer
  
networks:
  deploy_network:
    driver: bridge

indexer.py 読み取り

from elasticsearch import Elasticsearch
from elasticsearch.helpers import bulk
    
es = Elasticsearch(hosts=[{"host":'elasticsearch'}]) # what should I put here?

actions = [
    {
    '_index' : 'test',
    '_type' : 'content',
    '_id' : str(item['id']),
    '_source' : item,
    }
for item in [{'id': 1, 'foo': 'bar'}, {'id': 2, 'foo': 'spam'}]
]
    
# create index
print("Indexing Elasticsearch db... (please hold on)")
bulk(es, actions)
print("...done indexing :-)")

ElasticsearchサービスのDockerfileは

FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.1.3
EXPOSE 9200
EXPOSE 9300

インデクサーのそれは

FROM python:3.6-slim
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
ENTRYPOINT [ "python" ]
CMD [ "indexer.py" ]

ピップでダウンロードするrequirements.txtだけ含まelasticsearchれています。

で実行するとdocker-compose run indexerhttps://pastebin.com/6U8maxGXConnectionRefusedError: [Errno 111] Connection refusedでエラーメッセージが表示されますelasticsearchはcurl -XGET 'http://localhost:9200/' 、を実行して、または実行することで確認できる範囲で稼働していdocker ps -aます。

docker-compose.ymlまたはを変更してindexer.py問題を解決するにはどうすればよいですか?

ミハイ・トドール

問題は同期のバグです。接続しようとしたelasticsearchときに完全に開始されていませんindexerelasticsearchクエリを実行する前に、再試行ロジックを追加して、それが稼働していることを確認する必要があります。es.ping()指数バックオフで成功するまでループで実行するようなものでうまくいくはずです。

更新:DockerHEALTHCHECK命令を使用して、同様の結果を得ることができます(つまり、Docker命令elasticsearchに対してクエリを実行する前にDocker命令が稼働していることを確認してください)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ