Elasticsearch访问 IP:9200 问题

本文详细记录了在Centos6.5上安装Elasticsearch过程中遇到的问题及解决方法,包括配置network.host允许外部访问、调整系统限制参数、关闭防火墙等步骤。

Elasticsearch

访问 链接:9200问题

Centos6.5虚拟机上安装了ES,只能在虚拟机上通过127.0.0.1:9200来访问,代表安装成功

当在本地通过虚拟机ip+9200访问时出现错误。
解决方案:
在安装路径下的config/elasticsearch.yml文件中,
添加 network.host: 0.0.0.0 表示所有用户可访问
按理说,应该可以访问了,但是
因为本人用的虚拟机是centos6.5,centos6不支持secComp,而elasticsearch5.2.0以上的版本默认bootstrap。system_call_filter为true进行检测,所以导致检测失败,失败后会导致es不能启动。
所以,继续在该文件添加

bootstrap.memory_lock: false
bootstrap.system_call_filter: false

继续运行,发现还是不能启动es,
出现error:

ERROR: [2] bootstrap checks failed
[1]: max number of threads [1024] for user [user] is too low, increase to at least [4096]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

所以还得继续解决:
1.切换到root用户模式
2.到 /etc/security/limits.conf文件修改资源参数,添加:

* soft nofile 65536 
* hard nofile 131072

对于错误【1】,到 /etc/security/limits.d/90-nproc.conf文件中修改最大线程数

*  soft nproc 1024
# 将上面的修改为:
*  soft nproc 4096

对于错误【2】,到/etc/sysctl.conf文件中添加最大虚拟内存,因为默认的太小
添加:
vm.max_map_count=655360
保存后并执行下行命令生效:
sysctl -p

之后,已经完全启动起来了,根据ip地址访问,还是不行,访问超时,这个时候,就要关掉防火墙试试了,
service iptables status 查看防火墙是否开关。
centos6.5 (其他版本可能有所不同)永久性开关防火墙:

开启:chkconfig iptables on
关闭:chkconfig iptables off

即时生效,重启后会复原

开启:service iptables start
关闭:service iptables stop

碰到错误 java.lang.IllegalStateException: failed to obtain node locks
可能是因为之前的没有正常关闭,可以通过命令

ps aux | grep 'elastic'
kill -9 进程号 关闭进程

也可以在 config/elasticsearch.yml文件中新增一个配置变量:
node.max_local_storage_nodes: 256

然后,,,就成功了

<think>好的,我现在需要帮助用户解决Docker中启动Elasticsearch后无法通过localhost:9200访问问题,即使防火墙未开启的情况下。这个问题可能涉及多个方面,我需要逐步分析可能的原因和解决方案。 首先,用户提到使用curl localhost:9200返回空响应[^1],但在宿主机上执行curl却能获取ES信息,而外网无法连接[^2]。这可能说明容器网络配置的问题Elasticsearch默认绑定到localhost,如果容器网络模式是默认的bridge,可能需要正确映射端口或调整绑定地址。 接下来,检查Docker运行命令是否正确。Elasticsearch的Docker镜像可能需要特定的环境变量,比如discovery.type=single-node来单节点运行,或者设置network.host为0.0.0.0以允许外部访问。如果用户没有正确设置这些参数,Elasticsearch可能只监听容器内部网络,导致宿主机无法访问。例如,引用[3]提到使用的是elasticsearch:7.10.1镜像,可能需要相应的配置。 然后,查看端口映射是否正确。Docker命令中是否使用了-p 9200:9200来将容器的9200端口映射到宿主机的同端口。如果端口映射错误,比如宿主机的其他端口,那么访问localhost:9200自然无法连接。 另外,用户提到外网无法连接,但宿主机可以,这可能涉及到Elasticsearch的绑定地址设置。在elasticsearch.yml配置文件中,network.host应该设置为0.0.0.0,允许所有IP访问。不过,在Docker环境中,可能需要通过环境变量来覆盖这些设置,比如使用ES_JAVA_OPTS="-Xms512m -Xmx512m"和discovery.type=single-node。例如,引用[4]中修改kibana.yml的elasticsearch.hosts为虚拟机IP,说明可能需要类似的配置调整。 此外,检查容器日志是否有错误信息,使用docker logs <container_id>来查看启动过程中的问题。可能存在的错误包括内存不足、配置错误等。例如,如果ES没有足够的内存分配,可能会导致启动失败,从而无法响应请求。 最后,考虑Docker的网络模式。如果使用host网络模式,可能不需要端口映射,但一般情况下,默认的bridge模式需要正确映射端口。另外,检查是否有其他容器或进程占用了9200端口,导致冲突。 综合以上分析,解决方案可能包括调整Docker运行命令,正确设置环境变量,确保端口映射正确,检查Elasticsearch的绑定地址,以及查看容器日志排查错误。</think>### 解决Docker中Elasticsearch无法通过`localhost:9200`访问问题 #### 1. 检查Docker运行命令 确保启动Elasticsearch容器时正确绑定端口和配置网络: ```bash docker run -d --name es \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \ elasticsearch:7.10.1 ``` - **关键参数**: - `-p 9200:9200`:将容器的9200端口映射到宿主机。 - `-e "discovery.type=single-node"`:单节点模式,避免集群配置问题[^3]。 - `-e "ES_JAVA_OPTS=-Xms1g -Xmx1g"`:分配足够内存,避免启动失败。 #### 2. 验证Elasticsearch绑定地址 Elasticsearch默认可能绑定到容器内部IP,需修改为`0.0.0.0`以允许外部访问: - **通过环境变量覆盖配置**: ```bash docker run -d ... -e "network.host=0.0.0.0" ... ``` - **手动修改配置文件**(需挂载`elasticsearch.yml`): ```bash docker run -d ... -v /path/to/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml ... ``` 配置文件内容: ```yaml network.host: 0.0.0.0 ``` #### 3. 检查容器状态和日志 - **查看容器是否运行**: ```bash docker ps | grep elasticsearch ``` - **查看日志排查错误**: ```bash docker logs <container_id> ``` 常见问题: - 内存不足:调整`ES_JAVA_OPTS`(如`-Xms512m -Xmx512m`)。 - 配置文件错误:检查挂载的配置或环境变量。 #### 4. 验证宿主机访问 - **从宿主机测试容器IP**: ```bash # 获取容器IP docker inspect <container_id> | grep IPAddress # 使用容器IP访问 curl http://<容器IP>:9200 ``` - **若容器IP访问但`localhost`不行**:说明端口映射未生效,检查`-p 9200:9200`是否遗漏。 #### 5. 处理网络冲突 - **检查端口占用**: ```bash netstat -tuln | grep 9200 ``` - **更换宿主机端口**(如改用`-p 9201:9200`): ```bash docker run ... -p 9201:9200 ... ``` #### 6. 验证外网访问 若宿主机可访问但外网不行: - **检查宿主机防火墙**(即使用户确认已关闭,需二次验证): ```bash sudo ufw status ``` - **调整Elasticsearch安全配置**(如7.x及以上版本需启用HTTP API)[^4]。 --- ### 最终解决方案示例 ```bash # 清理旧容器(如有) docker stop es && docker rm es # 启动新容器(含完整配置) docker run -d --name es \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \ -e "network.host=0.0.0.0" \ elasticsearch:7.10.1 ``` 执行后通过`curl localhost:9200`应返回Elasticsearch版本信息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值