Java学习踩坑:在Docker中创建Elasticsearch容器以及创建时出现的问题

本篇文章只记录本人这个菜鸟学习的笔记以及遇到的问题,如有不对,欢迎指正!

要在Docker中安装ES,首先需要拉取ES的镜像

docker pull elasticsearch:5.6.8

我在学习的时候用的为ES5.6.8,其他版本应该通用
然后创建容器

docker run ‐di ‐‐name=ES5.6.8 ‐p 9200:9200 ‐p 9300:9300
elasticsearch:5.6.`在这里插入代码片`8

通过本地浏览器访问

http://你的虚拟机IP:9200/

看到以下json数据,为创建成功

{
"name" : "WmBn0H‐",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "2g‐VVbm9Rty7J4sksZNJEg",
"version" : {
"number" : "5.6.8",
"build_hash" : "688ecce",
"build_date" : "2018‐02‐16T16:46:30.010Z",
"build_snapshot" : false,
"lucene_version" : "6.6.1"
},
"tagline" : "You Know, for Search"
}

<================================================================================>
发现的问题
但是通过Postman来给SpringCloud项目发送请求,发现Docker中的ES的9300端口不可用

NoNodeAvailableException[None of the configured nodes are available:
[{#transport#‐1}{exvgJLR‐RlCNMJy‐hzKtnA}{192.168.10.136}
{192.168.10.136:9300}]
]
at
org.elasticsearch.client.transport.TransportClientNodesService.ensureNodes
AreAvailable(TransportClientNodesService.java:347)
at
org.elasticsearch.client.transport.TransportClientNodesService.execute(Tra
nsportClientNodesService.java:245)
at
org.elasticsearch.client.transport.TransportProxyClient.execute(TransportP
roxyClient.java:59)

这是因为elasticsearch从5版本以后默认不开启远程连接,需要修改配置文件

修改配置文件需要进入容器内部

docker exec ‐it ES5.6.8 /bin/bash

使用ls命令可以看到config文件夹,进入config可以看到elasticsearch.yml文件

但是我们无法使用vi命令来操作,所以只能选择将配置文件挂载到容器外部

退出容器,将elasticsearch.yml文件拷贝到宿主机

docker cp ES5.6.8:/usr/share/elasticsearch/config/elasticsearch.yml
/usr/share/elasticsearch.yml

停止,删除原来的容器

docker stop tensquare_elasticsearch
docker rm tensquare_elasticsearch

重新创建容器

docker run ‐di ‐‐name=ES5.6.8 ‐p 9200:9200 ‐p 9300:9300 ‐v
/usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch
.yml elasticsearch:5.6.8

修改/usr/share/elasticsearch.yml 将 transport.host: 0.0.0.0 前的#去掉后保
存文件退出。其作用是允许任何ip地址访问elasticsearch .开发测试阶段可以这么做,生
产环境下指定具体的IP。

重新启动

docker restart ES5.6.8

重启后,一直使用来查看是否启动成功

docker ps

我们会发现启动失败了,这是为啥?

这与我们刚才修改的配置有关,因为elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以我们还需要系统调优。

一共需要修改两个文件
修改/etc/security/limits.conf ,追加内容

* soft nofile 65536
* hard nofile 65536
#nofile是单个进程允许打开的最大文件个数 
#soft nofile 是软限制
#hard nofile是硬限制

修改/etc/sysctl.conf,追加内容

vm.max_map_count=655360
#限制一个进程可以拥有的VMA(虚拟内存区域)的数量

修改后执行下面命令

#修改内核参数后,立马生效
sysctl ‐p

重新启动虚拟机,再次启动容器
再次通过项目来访问,发现已经可以远程访问了
<================================================================================>
IK分词器以及head插件的安装在LInux中以及Windows中的安装大同小异
直接将IK的文件夹放置在ES的plugin中即可
只是head插件需要在docker中创建容器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值