Elasticsearch:无法连接到本地主机端口9200-连接被拒绝


110

当我尝试使用连接到Elasticsearch时, curl http://localhost:9200它工作正常。

但是当我运行curl http://IpAddress:9200它时会抛出一个错误说

无法连接到本地主机端口9200:连接被拒绝

如何解决这个错误?


如果您已经在elasticsearch.yml文件中设置了network.host:localhost,那么您可以尝试在请求中添加http协议:curl -X GET "http://localhost:9200"
Xxx Xxx

至少在Windows 10上使用Elasticsearch 7.8.0,仅对elasticsearch.yml文件中的network.host取消注释对我有用。
DLyons

Answers:


81

默认情况下,它应该绑定到所有本地地址。因此,假设你没有使用防火墙在网络层的问题,唯一的ES设置我能想到是检查network.bind_host并确保其未设置或设置为0.0.0.0::0或正确的IP地址为您的网络。

更新:根据ES 2.3中的注释,您应该进行设置network.host


11
我必须明确设置该network.bind_host值,而未设置是我的问题。
2015年

如何在Windows中显式设置network.bind_host?
Rizwan Patel

您确定这是安全的吗?我认为权利仅是从本地服务器访问。
Liko 2016年

好吧,在大多数情况下,这是安全的。但是,是的,这就是为什么“用于您的网络的正确IP地址”子句的原因。
Andrew White

3
如下所述,“ network.bind_host”现在是
elasticsearch

78

编辑/etc/elasticsearch/elasticsearch.yml并添加以下行:

网络主机:0.0.0.0

这将“取消设置”此参数,并允许来自其他IP的连接。


1
这对我有用,谢谢!但是在Mac上,配置文件位于/Applications/elasticsearch-2.1.1/config/elasticsearch.yml,我必须编辑的参数network.host不是network.bind_host
bjornte

8
在elasticsearch 2.2中,该参数称为network.host
Orr 2016年

这个/etc/elasticsearch/elasticsearch.yml文件应该在Docker容器中?
Ashish Karpe'1

2
这为我解决了,我使用在docker容器中运行的elasticsearch-6.0.0。更改配置后,我现在可以通过访问curl http://172.17.0.2:9200。您将认识到这是常用的docker ip地址。
trueadjustr

1
network.host:0.0.0.0 -没有帮助,但是这个例外,我从脑获得
明道K.

29

尝试了此页面上的所有内容,只有此处的说明有所帮助。

在中/etc/default/elasticsearch,确保未注释以下内容:

START_DAEMON=true
ES_USER=elasticsearch
ES_GROUP=elasticsearch
LOG_DIR=/var/log/elasticsearch
DATA_DIR=/var/lib/elasticsearch
WORK_DIR=/tmp/elasticsearch
CONF_DIR=/etc/elasticsearch
CONF_FILE=/etc/elasticsearch/elasticsearch.yml
RESTART_ON_UPGRADE=true

确保/var/lib/elasticsearch归Elasticsearch用户所有:

chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/

1
有同样的问题,解决方案是公正chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/而没有评论的START_DAEMON=true
Estevex

1
对我来说,这个解决方案+ sudo systemctl restart elasticsearch@kalanit的回答,解决了这个问题
Sabre

1
这是唯一在Ubuntu 16.04上对我有帮助的解决方案。
Snehal

21

以我为例,elasticsearch开始了。但还是有

curl: (7) Failed to connect to localhost port 9200: Connection refused

以下命令未成功

sudo service elasticsearch restart

为了使其正常工作,我不得不运行

sudo systemctl restart elasticsearch

然后一切顺利。


1
我遇到的问题与您的问题完全相同,您的解决方案对我有用。非常感谢!
shaosh

6
我也不得不做sudo systemctl enable elasticsearch
max pleaner

我遇到了同样的问题,但是不明白为什么systemctl工作和服务不起作用?
Luv33preet

@ Luv33preet systemctl由systemd驱动,是一个完全不同的程序
haff 17-4-26

重新启动服务对我来说适用于Ubuntu 16.04和弹性搜索1.74
racl101

19

为什么不从以下命令行开始:

$ sudo service elasticsearch status

我做到了并得到:

"There is insufficient memory for the Java Runtime..."

然后我编辑了/etc/elasticsearch/jvm.options文件:

...

################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

################################################################

...

这就像一个魅力。


这似乎提供了与3月22日答案bu @ Jefferson.macedo相同的信息。一个新的答案不仅应该重写现有的详细信息,还应该提供新的和usefil信息。
AdrianHHH

17

此处提出的解决方案均不适合我,但最终使它起作用的是将以下内容添加到 elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

在那之后,我重新启动了服务,现在我curl既可以在VM内也可以从外部进行服务。出于某种奇怪的原因,我不得不在VM 尝试几种不同的curl呼叫变体:

curl localhost:9200
curl http://localhost:9200
curl 127.0.0.1:9200

注意:我在Ubuntu 14.04上使用Elasticsearch 5.5


1
你是救星。在阅读了各种不同的帖子之后,这对我来说是唯一有效的方法。
Yu Chen

1
是的,非常有帮助,这也是唯一对我有用的东西!
osehgol

谢谢,我尝试了您的解决方案,它成功了。我发现这很奇怪,因为我只需要取消注释端口号即可。我认为这些注释行就像预定义的默认值
zwep

13
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)

确保服务器已启动。当我的虚拟机的RAM太小并且无法启动es时,我已经看到了此问题。

sudo systemctl status elasticsearch

上面将向您显示es是否确实在运行。


4
请查看stackoverflow.com/questions/29447434/…,以获得有关解决此问题的帮助。
Ryan Miller

8

对于这个问题,我不得不使用: sudo /usr/share/elasticsearch/bin/elasticsearch start

以便能够在端口9200/9300(sudo netstat -ntlp)上获得某些信息并响应:

curl -XGET http://localhost:9200


1
谢谢。这适用于ElasticSearch 1.〜版本。
MontrealDevOne

检查状态,错误消息无济于事。仅当手动运行bin文件时,它才会给出正确的错误消息。
sulaiman sudirman

6

编辑elasticsearch.yml并添加以下行

http.host: 0.0.0.0

network.host: 0.0.0.0 没用


3

打开Dockerfileelasticsearch文件夹,并更新“network.host = 0.0.0.0”“network.host = 127.0.0.1” 。然后重新启动容器。卷曲检查连接。

$ curl http://docker-machine-ip:9200
{
  "name" : "vI6Zq_D",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hhyB_Wa4QwSX6zZd1F894Q",
  "version" : {
    "number" : "5.2.0",
    "build_hash" : "24e05b9",
    "build_date" : "2017-01-24T19:52:35.800Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.0"
  },
  "tagline" : "You Know, for Search"
}

3

我在拒绝9200端口上的连接时遇到了同样的问题。使用命令检查elasticsearch服务状态sudo service elasticsearch status。如果出现错误,并且您阅读了与Java相关的任何内容,则可能是您的jvm内存问题。您可以在中进行编辑/etc/elasticsearch/jvm.options。对于Amazon环境上的1GB RAM内存机器,我将配置保留在:

-Xms128m
-Xmx128m

设置并重新启动elasticsearch服务后,它就像一个魅力。Nmap和UFW(如果使用本地防火墙)检查也应该很有用。


1
这就是为我做的。我的配置都为1g,AWS实例(t2.micro)无法为其分配那么多的内存。启动和重新启动命令以静默方式失败,但是status命令详细说明了该错误。
格雷格·查尔斯

2

我遇到了类似的问题。

这是我解决的方法

运行以下服务命令以启动ElasticSearch

sudo service elasticsearch start

要么

sudo systemctl start elasticsearch

如果仍然出现错误

curl:(7)无法连接到本地主机端口9200:连接被拒绝

运行以下服务命令以检查ElasticSearch的状态

sudo service elasticsearch status

要么

sudo systemctl status elasticsearch

如果您收到如下所示的响应(Active:active(running)),则表明ElasticSearch是active并且正在运行

●elasticsearch.service-Elasticsearch已加载:已加载(/usr/lib/systemd/system/elasticsearch.service;已禁用;供应商预设:已启用) 活动:活动(运行),自SAT 2019-09-21 11:22:21 WAT;3秒前

然后,您可以使用以下命令向本地主机上的端口9200发送HTTP请求,以测试您的Elasticsearch节点是否正在运行:

curl http://localhost:9200

否则,如果您得到不同的响应,则可能必须进一步调试以修复它,但是运行下面的命令将帮助您从开始检测哪些警告正在保留ElasticSearch服务。

sudo service elasticsearch status

要么

sudo systemctl status elasticsearch

如果要停止ElasticSearch服务,只需运行以下service命令;

sudo service elasticsearch stop

要么

sudo systemctl stop elasticsearch

N / B:每次遇到错误时,您可能都必须运行命令sudo service elasticsearch status OR sudo systemctl status elasticsearch才能知道ElasticSearch服务的状态。

这也适用于Kibana,每次遇到错误时都运行命令sudo service kibana status OR sudo systemctl status kibana,以告知Kibana服务的状态。

就这样。

我希望这有帮助。


1

在这种情况下,首先需要使用以下命令检查java版本:

java -version

运行此命令后,您将获得以下内容:

Java版本“ 1.7.0_51” OpenJDK运行时环境(rhel-2.4.5.5.el7-x86_64 u51-b31)OpenJDK 64位服务器VM(内部版本24.51-b03,混合模式)

然后使用以下命令:

update-alternatives --config java

然后选择以下版本

* + 1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java 2 /usr/java/jdk1.8.0_73/jre/bin/爪哇

输入以保留当前选择[+],或键入选择号:2

curl -XGET http://127.0.0.1:9200

1

我的2美分

我只是按照Digital Ocean上的安装过程进行操作,显然回购中可用的软件包不是最新的,我删除了所有内容,并直接从Elastic Search中遵循了安装过程,现在一切都可以正常使用,基本上是开箱即用的行为一个指向9200的本地主机。在Kibana上发现了相同的问题/对我来说,解决方案也是,删除所有内容并按照他们的程序进行操作,希望这可以节省两个小时的时间(我花了很多时间来弄清楚如何设置ELK!)



1

将network.bind更改为0.0.0.0,将http:port更改为9200。绑定地址0.0.0.0表示本地计算机上的所有IPv4地址。如果主机有两个IP地址192.168.1.1和10.1.2.1,并且主机上运行的服务器侦听0.0.0.0,则在这两个IP上都可以访问它。


1

如果遇到“ 连接被拒绝”错误,只需运行以下命令以检查ElasticSearch服务的状态

sudo service elasticsearch status

这将帮助您了解ElasticSearch服务的状态及其处理方法。



0

在利用了上面的一些答案之后,请不要忘记在apt安装之后,完全可以重新启动系统。


0

只是为了补充这一点,我通过Google遇到了许多文档,它们说将network.host设置为localhost。

这样做给了我臭名昭著的联系。您必须使用IP地址(127.0.0.1),而不是FQDN。

杰夫


0

确保9200在我的情况下该端口是一个Amazon实例打开的,所以当我在安全组中打开该端口时,curl命令起作用。



0

我的问题是我无法使用,localhost需要将其设置为本地主机的IP地址

network.bind_host: 127.0.0.1


0

就我而言,问题出在我open-jdk 11以前安装的Java版本中。这就是在启动服务时造成的问题。我进行了更改open-jdk 8,它开始起作用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.