首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker中的Elasticsearch : elasticsearch.exceptions.ConnectionError: ConnectionError - Python

问Docker中的Elasticsearch : elasticsearch.exceptions.ConnectionError: ConnectionError - Python
EN

Stack Overflow用户
提问于 2020-05-20 12:49:48
回答 1查看 322关注 0票数 0

我正在使用elasticsearch.helpers.scan函数来检索python中的文档。它在本地运行得很好,但当在docker上运行时,我得到了以下ConnectionError:

代码语言:javascript
复制
Traceback (most recent call last):
  File "main.py", line 9, in <module>
    from search_results import *
  File "/app/search_results.py", line 9, in <module>
    from BM25_Indexing import *
  File "/app/BM25_Indexing.py", line 13, in <module>
    results = get_data_es() 
  File "/app/Text_Cleaning.py", line 45, in get_data_es
    return list(results_gen)
  File "/usr/local/lib/python3.7/site-packages/elasticsearch/helpers/actions.py", line 439, in scan
    body=query, scroll=scroll, size=size, request_timeout=request_timeout, **kwargs
  File "/usr/local/lib/python3.7/site-packages/elasticsearch/client/utils.py", line 84, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/elasticsearch/client/__init__.py", line 1548, in search
    "GET", _make_path(index, doc_type, "_search"), params=params, body=body
  File "/usr/local/lib/python3.7/site-packages/elasticsearch/transport.py", line 358, in perform_request
    timeout=timeout,
  File "/usr/local/lib/python3.7/site-packages/elasticsearch/connection/http_urllib3.py", line 254, in perform_request
    raise ConnectionError("N/A", str(e), e)
elasticsearch.exceptions.ConnectionError: ConnectionError(<urllib3.connection.HTTPConnection object at 0x7f5c77b6bd90>: Failed to establish a new connection: [Errno 111] Connection refused) caused by: NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7f5c77b6bd90>: Failed to establish a new connection: [Errno 111] Connection refused)

此错误的python代码如下:

代码语言:javascript
复制
   def get_data_es():
    ES_HOST = {
            "host": "elastic",
            "port": 9200
            }

    ES_INDEX = "radius_ml_posts"
    ES_TYPE = {'author': 'vaibhav'}

    es = Elasticsearch(hosts=[ES_HOST,])
    count = 0
    while True:
        try:
            es.ping()
            print("Elasticsearch server bounded at url: {}".format(es.cat.master().split()[-2]))
            results_gen = elasticsearch.helpers.scan(
                es,
                query={"query": {"match_all": {}}},
                index=ES_INDEX
            )
            break
        except elasticsearch.exceptions.ConnectionError:
            time.sleep(5)
            count += 1
            print("Trying to connect to elasticsearch server. Retry number: {}".format(count))
            print("Connections info: {}".format(es.transport.connection_pool.connections))
    return list(results_gen)

我不确定如何解决这个问题。请帮帮忙。

编辑:使用@Lupanoide建议的解决方案后,如下所示:

代码语言:javascript
复制
ES_HOST = os.environ['ES_HOST']

并按如下方式运行docker:

代码语言:javascript
复制
docker run -p 8080:8080 -e ES_HOST='192.168.1.101:9200' myimage

我得到以下连接超时错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "main.py", line 9, in <module>
    from search_results import *
  File "/app/search_results.py", line 9, in <module>
    from BM25_Indexing import *
  File "/app/BM25_Indexing.py", line 13, in <module>
    results = get_data_es() 
  File "/app/Text_Cleaning.py", line 44, in get_data_es
    return list(results_gen)
  File "/usr/local/lib/python3.7/site-packages/elasticsearch/helpers/actions.py", line 439, in scan
    body=query, scroll=scroll, size=size, request_timeout=request_timeout, **kwargs
  File "/usr/local/lib/python3.7/site-packages/elasticsearch/client/utils.py", line 84, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/elasticsearch/client/__init__.py", line 1548, in search
    "GET", _make_path(index, doc_type, "_search"), params=params, body=body
  File "/usr/local/lib/python3.7/site-packages/elasticsearch/transport.py", line 358, in perform_request
    timeout=timeout,
  File "/usr/local/lib/python3.7/site-packages/elasticsearch/connection/http_urllib3.py", line 254, in perform_request
    raise ConnectionError("N/A", str(e), e)
elasticsearch.exceptions.ConnectionError: ConnectionError((<urllib3.connection.HTTPConnection object at 0x7fd4d21d4ed0>, 'Connection to 192.168.1.101 timed out. (connect timeout=10)')) caused by: ConnectTimeoutError((<urllib3.connection.HTTPConnection object at 0x7fd4d21d4ed0>, 'Connection to 192.168.1.101 timed out. (connect timeout=10)'))
EN

回答 1

Stack Overflow用户

发布于 2020-05-20 13:01:07

确保在运行容器时暴露端口9200。

例如,

如果该端口在主机系统中未被使用,

代码语言:javascript
复制
$ docker run --expose 80 ubuntu bash

或者,如果它已在主机中使用,请使用端口映射,

代码语言:javascript
复制
$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

这会暴露容器的端口80,而不会将端口发布到主机系统的接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61905342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档