[英]Not able to connect to local elasticsearch process from docker container
編輯
我認為正在發生的事情是 docker 進程中的 localhost 指的是容器自己的 localhost,而不是我系統的 localhost。 那么我如何確保當運行容器的應用程序嘗試連接到容器的 localhost:9200 時,它實際上連接到了我系統的 localhost:9200?
當我訪問 localhost:9200 時,我的 ES 應用程序似乎正在運行。 在 chrome 中看起來像這樣:
{
"name" : "H1YDvcg",
"cluster_name" : "elasticsearch_jwan",
"cluster_uuid" : "aAorzRYTQPOI0j_OgMGKpA",
"version" : {
"number" : "6.8.1",
"build_flavor" : "oss",
"build_type" : "tar",
"build_hash" : "1fad4e1",
"build_date" : "2019-06-18T13:16:52.517138Z",
"build_snapshot" : false,
"lucene_version" : "7.7.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
我在終端窗口中運行 ES,它在我運行命令elasticsearch
。
我正在使用以下命令運行 docker 容器:
docker run -e DATALOADER_QUEUE='<some aws SQS queue name'\
-e ES_HOST='localhost'\
-e ES_PORT='9200'\
-e AWS_ACCESS_KEY_ID='<somekey>'\
-e AWS_SECRET_ACCESS_KEY='<somekey>'\
-e AWS_DEFAULT_REGION='us-west-2'\
<application name>
我收到這個錯誤:
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=9200): Max retries exceeded with url: /person/_search (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f36e4189c90>
有誰知道發生了什么? 我不明白為什么即使 ti 似乎在 localhost:9200 上運行,它也無法連接到 ES。
解決方案是在 ES 主機設置中使用host.docker.internal
。
我只是使用了es_client = Elasticsearch(host=_es_host,
where es_host = host.docker.internal
並確保在本地時使用 http 而不是 https。
Elasticsearch 運行在您主機上的9200
端口,並且想要訪問 elasticsearch 的應用程序正在容器內運行。
docker 容器默認運行在橋接網絡模式下,其中主機和容器網絡是不同的。 因此容器內的 localhost 與主機上的不同。
在這里你可以做兩件事:
private/public-ip:9200
訪問 elasticsearch或者
docker run -e DATALOADER_QUEUE='<some aws SQS queue name'\
-e ES_HOST='localhost'\
-e ES_PORT='9200'\
-e AWS_ACCESS_KEY_ID='<somekey>'\
-e AWS_SECRET_ACCESS_KEY='<somekey>'\
-e AWS_DEFAULT_REGION='us-west-2'\
--net=host \
<application name>
注意:-- --net=host
選項將告訴--net=host
容器使用主機網絡模式。
您可以使用 -p option docker 命令將主機端口綁定到 docker 端口。 因此,在您下面的 docker 命令中,您可以再添加一行以將主機 9200 端口綁定到 docker 9200 端口。 注意我添加了-p 9200:9200
並且在這個文檔的第 3 點中很好地解釋了同樣的內容
docker run -p 9200:9200 -e DATALOADER_QUEUE='<some aws SQS queue name'\
-e ES_HOST='localhost'\
-e ES_PORT='9200'\
-e AWS_ACCESS_KEY_ID='<somekey>'\
-e AWS_SECRET_ACCESS_KEY='<somekey>'\
-e AWS_DEFAULT_REGION='us-west-2'\
<application name>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.