Docker搭建ElasticSearch
Docker这个容器技术已经非常成熟了,市面上用的公司也特别多,我呢也经常用,也被这Docker经常坑,像什么mysql镜像版本更新后远程无法连接咯,什么虚拟机或者虚拟ip使用Docker搭建Nginx外部无法访问咯,再像这个ES启动报错!!!哎,小场面,不要慌。下面开机!!!
环境准备
1.java环境一个
2.Docker环境一个
开始搭建
1.检查java环境
java -version
这里教大家一个快速切换java环境的命令
update-alternatives --config java
输入对应的数字回车即可
2.拉取ES镜像
docker pull elasticsearch:7.4.2
这里最好指定一下版本,后面还要搭配Kibana一起使用
3.创建对应目录、文件
这一步其实可做可不做,看自己的需求,如果需要将配置、数据、插件挂载到外部,那么就要这一步
在ES的工作目录下创建config、data、plugins,其中config目录下创建elasticsearch.yml文件
这个文件挂载是特别特别坑,真的是神坑,这里需要注意格式
(空格)key:(空格)value
#设置远程访问http.host: 0.0.0.0
保存即可
4.启动
docker run --name es -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms64m -Xmx128m" -e "discovery.type=single-node" -v /data/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/es/data:/usr/share/elasticsearch/data -v /data/es/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.4.2
这里解释一下,-v是目录挂载 -e是ES的启动配置参数 -p是映射端口 -d后台启动
其中-e ES_JAVA_OPTS="-Xms64m -Xmx128m"是设置占用内存大小,一般线上检索服务器-ES服务器32G,这里就小一点测试,-e "discovery.type=single-node"这个是设置单节点运行
5.查看ES容器状态
docker ps
6.查看ES容器启动成功日志
这一步虽说有点多余不过等下回演示保存情况
7.远程访问测试
好,那么到这里的正常操作就ok了,下面在演示异常情况
ES启动异常
这里的一个jdk版本警告可以忽略
1.外部挂载目录权限
保存日志大概长这样
Exception in thread "main" 2018-06-03 17:36:23,881 main ERROR No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property ‘log4j2.debug‘ to show Log4j2 internal initialization logging.
2018-06-03 17:36:24,113 main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)at java.lang.SecurityManager.checkPermission(SecurityManager.java:585)at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.checkMBeanTrustPermission(DefaultMBeanServerInterceptor.java:1848)at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:322)at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)at org.apache.logging.log4j.core.jmx.Server.register(Server.java:389)at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:167)at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:140)at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:556)at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:242)at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:618)at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:54)at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:62)at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:101)at org.elasticsearch.ExceptionsHelper.<clinit>(ExceptionsHelper.java:42)at org.elasticsearch.ElasticsearchException.toString(ElasticsearchException.java:663)at java.lang.String.valueOf(String.java:2994)at java.io.PrintStream.println(PrintStream.java:821)at java.lang.Throwable$WrappedPrintStream.println(Throwable.java:748)at java.lang.Throwable.printStackTrace(Throwable.java:655)at java.lang.Throwable.printStackTrace(Throwable.java:643)at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1061)at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1052)at java.lang.Thread.dispatchUncaughtException(Thread.java:1959)SettingsException[Failed to load settings from /usr/local/elasticsearch-5.6.0/config/elasticsearch.yml]; nested: AccessDeniedException[/usr/local/elasticsearch-5.6.0/config/elasticsearch.yml];at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:102)at org.elasticsearch.cli.EnvironmentAwareCommand.createEnv(EnvironmentAwareCommand.java:72)at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67)at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134)at org.elasticsearch.cli.Command.main(Command.java:90)at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91)at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84)
Caused by: java.nio.file.AccessDeniedException: /usr/local/elasticsearch-5.6.0/config/elasticsearch.ymlat sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)at java.nio.file.Files.newByteChannel(Files.java:361)at java.nio.file.Files.newByteChannel(Files.java:407)at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)at java.nio.file.Files.newInputStream(Files.java:152)at org.elasticsearch.common.settings.Settings$Builder.loadFromPath(Settings.java:1032)at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:100)... 6 more
解决方案
将es的操作目录权限放开即可
chown -R ela /es的目录
2.操作用户为root用户
这是因为ES有个安全保护策略,具体原因我也懒得去查,我这里只提供解决方案!
[2017-12-20T17:01:47,922][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as rootat org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-6.1.1.jar:6.1.1]at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-6.1.1.jar:6.1.1]at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.1.1.jar:6.1.1]at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.1.1.jar:6.1.1]at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.1.1.jar:6.1.1]at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-6.1.1.jar:6.1.1]at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:85) ~[elasticsearch-6.1.1.jar:6.1.1]
Caused by: java.lang.RuntimeException: can not run elasticsearch as rootat org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.1.1.jar:6.1.1]at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.1.1.jar:6.1.1]at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:322) ~[elasticsearch-6.1.1.jar:6.1.1]at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-6.1.1.jar:6.1.1]... 6 more
解决方案!
1.使用root角色创建ela用户
//创建角色
adduser ela
//设置密码(这里长度最好大于8位)
passwd ela
2.ela角色创建好了切换到ela用户下
sudo ela sudo找不到命令改为su
输入密码使用docker启动
这时使用ela用户操作docker会报错,这是因为ela不在docker用户组里面,没有权限使用docker这些命令
报错信息
Got permission denied while trying to connect to the Docker daemon socket at.....
3.切换root用户角色,给docker添加ela用户
sudo groupadd docker #添加docker用户组sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中newgrp docker #更新用户组
4.切换到ela用户下启动即可
3.elasticsearch.yml配置文件格式错误
[root@localhost config]# docker logs es
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
2020-07-08 14:30:14,828 main ERROR No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations . Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to config ure Log4j 2
Exception in thread "main" SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] bu t found [VALUE_STRING]];at org.elasticsearch.common.settings.Settings$Builder.loadFromStream(Settings.java:1097)at org.elasticsearch.common.settings.Settings$Builder.loadFromPath(Settings.java:1070)at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:83)at org.elasticsearch.cli.EnvironmentAwareCommand.createEnv(EnvironmentAwareCommand.java:95)at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:125)at org.elasticsearch.cli.Command.main(Command.java:90)at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115)at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)
Caused by: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]]at org.elasticsearch.common.xcontent.XContentParserUtils.ensureExpectedToken(XContentParserUtils.java:78)at org.elasticsearch.common.settings.Settings.fromXContent(Settings.java:617)at org.elasticsearch.common.settings.Settings.access$400(Settings.java:82)at org.elasticsearch.common.settings.Settings$Builder.loadFromStream(Settings.java:1093)... 8 more
真确的key和value格式
这是报错的配置
解决方案(空格)key:(空格)value
注意:如果碰到报错如下
"stacktrace": ["org.elasticsearch.bootstrap.StartupException: ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];",
这是并不是docker中的目录权限不足,而是docker挂在宿主机目录的权限不足,需要为data、config、plugin分别给权限
chmod 777 /...elasticsearch/data
chmod 777 /...elasticsearch/conf
chmod 777 /...elasticsearch/plugin
Docker搭建ElasticSearch相关推荐
- Docker 搭建elasticsearch 7.6.x集群
Docker 搭建elasticsearch 7.6.x集群 文章目录 拉取镜像 设置Elasticsearch挂载目录 编写elasticsearch.yml配置文件 node-1 node-2 n ...
- 用Docker搭建Elasticsearch集群
用Docker搭建Elasticsearch集群 对于用Docker搭建分布式Elasticsearhc集群的一个介绍,以及一些实施中遇到问题的总结 搜索服务简述 结合业务的场景,在目前的商品体系需要 ...
- docker 添加端口映射_苟且偷生的程序猿没法摸鱼了,从docker搭建elasticsearch集群开始学习...
最近刚换了公司,然后公司刚好使用的docker.而本人作为一个石锤的搬砖员,之前只知道搬砖们,对于这些东西确实没学过.今天在本地使用docker搭建elasticsearch集群,记录下过程,而且el ...
- Docker搭建Elasticsearch方法及启动后服务自动关闭的问题
太长不看,一句话总结 内存太小,启动命令中添加参数修改虚拟机大小即可 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e " ...
- Docker搭建ElasticSearch集群
Docker搭建ElasticSearch集群 一.环境准备 Linux Verison(7.9) VMware(16) Docker(20.10.16) ElasticSearch(7.17.1) ...
- 使用Docker搭建Elasticsearch集群环境
本篇文章首发于头条号单机如何搭建Elasticsearch集群?使用容器技术快速构建集群环境,欢迎关注头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_te ...
- 基于 docker 搭建 elasticsearch:5.6.8 分布式集群环境
文章目录 1. 目录结构 2. 前置配置 3. 单机版 es 集群搭建 4. es 客户端工具安装 5. 通过 api 操作索引 5.1 创建索引 5.2 创建 index 对应的 mapping 5 ...
- ELK(一)使用docker搭建elasticsearch
文章目录 为什么要搭建ELK ELK Stack的介绍 ELK Stack的架构图 es介绍 基本概念 es基础环境搭建 docker部署es 为什么要搭建ELK 介绍: ELK是es,logstas ...
- 基于Docker搭建Elasticsearch集群
一.环境搭建 SpringBoot整合es时使用的集群环境,如果不搭建集群使用SpringBoot整合时会报错:None of the configured nodes are available 我 ...
- Docker部署Elasticsearch及安装后自动关闭的问题
Docker搭建Elasticsearch方法 前往dockerhub官网:dockerhub 可查看elasticsearch相应版本 拉取镜像 选取一个版本拉取镜像,如docker pull el ...
最新文章
- WKWebView 的使用简介
- 稀疏矩阵的压缩存储与转置
- linux 用户态与内核态通信方式简介
- 利用计算机模拟人类的感知,利用计算机模拟人类的智能活动,属于计算机的什么应用领域...
- CGI、FastCGI 知识总结
- shell shocked伴奏版_Shell Shocked
- 微软启动了自爆程序,让我们一起帮它倒计时
- 脚本(js)控制页面输入
- 利用计算机进行绘制建筑图纸,工程计算机制图.pdf
- 天籁obd接口针脚定义_关于手机MicroUSB接口数据线,这里有最详细解说
- ascii码01100001_ASCII 码对照表详解 - 文章
- windows10安装masscan
- HTML5七夕情人节表白网页(流星动画3D相册) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白
- 学51单片机,总是感觉学不会该怎么办呢?
- [转贴]国内计算机类学术期刊投稿指南
- python是跨平台的 以及 py、pyc、pyo
- c++正方形的面积源代码
- 分析一个Auto.js写的抖音抢福袋脚本源码
- 1014: 编程计算长方形的周长和面积~
- JFrame 设置还原按钮(窗口最大化后,最大化按钮变为还原按钮)
热门文章
- xxx.so has text relocations. This is wasting memory and is a security risk. Please fix
- 《面试系列篇》——Java这些最基础的知识,你还记得多少?
- uni-app/小程序 DCloud appid 说明
- vs 应用程序无法正常启动0xc000007b 可能与VS中DLL引用有关
- leetcode笔记(五)809. Expressive Words
- 武汉大学计算机学院宿舍楼名称,武汉大学寝室排名 寝室图片
- python做淘宝客_python 做淘宝客程序(2)
- 帝国cms ajax,帝国CMS封装的ajax加载信息框架代码
- ESP32+TFT屏幕连接无线局域网投屏
- 计算机快速格式化u盘启动,制作启动盘格式化u盘