Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法从docker容器连接到本地elasticsearch进程_Python_Docker_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Python,Docker,elasticsearch" /> elasticsearch,Python,Docker,elasticsearch" />

Python 无法从docker容器连接到本地elasticsearch进程

Python 无法从docker容器连接到本地elasticsearch进程,python,docker,elasticsearch,Python,Docker,elasticsearch,编辑 我认为docker进程中的localhost指的是容器自己的localhost,而不是我的系统的localhost。那么,如何确保当运行容器的应用程序尝试连接到容器的localhost:9200时,它实际连接到我的系统的localhost:9200 当我访问localhost:9200时,我的ES应用程序似乎正在运行。在chrome中看起来是这样的: { "name" : "H1YDvcg", "cluster_name" : "elasticsearch_jwan", "cl

编辑

我认为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>

docker run-e DATALOADER_QUEUE='您可以使用-p选项docker命令将主机端口绑定到docker端口。因此,在下面的docker命令中,可以再添加一行,用于将主机9200端口绑定到docker 9200端口。注意,我已经添加了
-p9200:9200
,第3点文档对此做了很好的解释


docker run-p 9200:9200-e DATALOADER_QUEUE='Elasticsearch正在主机上的端口
9200
上运行,并且希望访问Elasticsearch的应用程序正在容器内运行

默认情况下,docker容器在网络模式下运行,其中主机和容器网络不同。因此,容器内的localhost与主机上的localhost不同

在这里,您可以做两件事:

  • 在应用程序代码中,尝试使用
    private/public ip:9200

  • 在网络模式下运行docker容器,使容器内的localhost和主机上的localhost相同。因为在这种模式下,容器使用主机的网络

docker run-e DATALOADER_QUEUE=”解决方案是在ES主机设置中使用
host.docker.internal


我刚才使用了
es\u client=弹性搜索(host=_es_host,
其中es_host=
host.docker.internal
,并确保在本地使用http而不是https。

e标志应该在-p 9200:9200后面,对吗?因此我再次对其进行了treid,但它不起作用。基本上,这应该可以解决我认为的问题:我的docker应用程序正在向本地主机发出请求:9200,但它使它们成为容器内的本地主机,而不是主机的本地主机,对吗?出于某种原因,这不起作用。这个答案的问题是
-p
选项将把来自主机上9200端口的请求转发到容器内的9200端口。但您需要的是相反的方式。从容器9200端口到->主机9200端口。@Jwan622这就是我在帖子中试图回答的问题。:)仔细阅读我在回答中提供的主机和网桥网络文档,它将帮助您理解docker网络,并对我的回答有清晰的认识。我尝试了这一点,但后来我向aws提出的请求似乎是无效的host@Jwan622这肯定会发生,因为您希望容器内的localhost与容器内的host.Or changi相同ng应用程序代码指向机器ip将是一个不错的选择。可能重复
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=9200): Max retries exceeded with url: /person/_search (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f36e4189c90>
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>
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>