docker安装Elasticsearch8.x
一、开始前准备
Elasticsearch、kibana、IK分词器的版本必须一致,其中Elasticsearch和kibana更新基本同步,IK分词器一般更新慢,需要先查看想安装的Elasticsearch版本是否有对应的IK分词器。ps:我安装当时最新版本8.15.1的时候,es和kibana安装好了之后才发现没有对应版本的IK
1.1 IK分词器下载地址
- elasticsearch-analysis-ik(一般教程都使用的该地址,无科学上网工具下载速度较慢):https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.12.2/elasticsearch-analysis-ik-8.12.2.zip
- infinilabs-analysis-ik(国内下载更快,推荐):https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2
1.2 创建网络
kibana需要链接es,创建一个网络便于通信
docker network create docker_default
二、安装Elasticsearch
镜像版本tag查询地址:https://hub.docker.com/
2.1 pull 镜像
docker pull elasticsearch:8.12.2
2.2 创建挂载目录
mkdir /opt/elasticsearch
2.3 不挂载启动
docker run -d \
--restart=always \
--name elasticsearch \
--network docker_default \
-p 9388:9200 \
-p 9389:9300 \
--privileged \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms2g -Xmx2g" \
elasticsearch:8.12.2
2.4 cp初始化文件
docker cp elasticsearch:/usr/share/elasticsearch/data /opt/elasticsearch/
docker cp elasticsearch:/usr/share/elasticsearch/plugins /opt/elasticsearch/
docker cp elasticsearch:/usr/share/elasticsearch/config /opt/elasticsearch/
赋权限
cd /opt/elasticsearch/
chmod 777 config/ data/ plugins/
2.5 删除未挂载启动es容器
docker stop elasticsearch
docker rm elasticsearch
2.6 启动容器并挂载
docker run -d \
--restart=always \
--name elasticsearch \
--network docker_default \
-p 9388:9200 \
-p 9389:9300 \
--privileged \
-v /opt/elasticsearch/data:/usr/share/elasticsearch/data \
-v /opt/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /opt/elasticsearch/config:/usr/share/elasticsearch/config \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms2g -Xmx2g" \
elasticsearch:8.12.2
2.7 关闭安全验证
1、导航到配置文件位置
cd /opt/elasticsearch/config/
2、vim elasticsearch.yml
默认为true,设置为false xpack.security.enabled: false
3、保存退出
:wq
4、重启es
docker restart elasticsearch
2.8 验证是否安装成功
访问服务器加端口地址 http://192.168.1.19:9388/
docker run 启动时,我将端口9200映射至了9388
三、安装kibana
3.1 创建挂载目录
mkdir /opt/kibana
3.2 无挂载启动
docker run -d \
--restart=always \
--name kibana \
--network docker_default \
-p 5601:5601 \
--privileged \
-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
kibana:8.12.2
ELASTICSEARCH_HOSTS:指定es链接信息
-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
3.3 cp文件
docker cp kibana:/usr/share/kibana/data /opt/kibana/
docker cp kibana:/usr/share/kibana/config /opt/kibana/
3.4 创建新的挂载容器
1、停止并删除原容器
docker stop kibana docker rm kibana
2、创建新容器并挂载
docker run -d \ --restart=always \ --name kibana \ --network docker_default \ -p 5601:5601 \ --privileged \ -v /opt/kibana/data:/usr/share/kibana/data \ -v /opt/kibana/config:/usr/share/kibana/config \ -e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \ kibana:8.12.2
3.5 验证是否安装成功
输入服务器ip地址+端口,如192.168.1.19:5601
四、安装IK分词器
4.1 以root用户身份进入容器
docker exec -u 0 -it elasticsearch /bin/bash
4.2 cd到bin
cd /usr/share/elasticsearch/bin/
4.3 执行下载
./elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2
4.4 重启es
docker restart elasticsearch
五、问题记录及解决方案
5.1 启动报错文件缺失 Missing logging config file
ERROR: Missing logging config file at /usr/share/elasticsearch/config/log4j2.properties, with exit code 78
ERROR: Missing logging config file at /usr/share/elasticsearch/config/log4j2.properties, with exit code 78
ERROR: Missing logging config file at /usr/share/elasticsearch/config/log4j2.properties, with exit code 78
挂载卷覆盖问题。挂载的本地目录覆盖了容器内部的默认目录内容,导致配置文件无法正常加载或丢失,创建了挂载目录,直接挂载启动会出现该问题,因为挂载目录为空,没有配置文件等信息。
解决方案:先启动一个无挂载的es,将容器中的data、config、plugins文件夹cp到挂载目录,再挂载启动。
5.2 权限不足,plugin requires additional permissions
elasticsearch@d12e46f67ad5:~/bin$ ./elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2
-> Installing https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2
-> Downloading https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.net.SocketPermission * connect,resolve
See https://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Continue with installation? [y/N]y
-> Failed installing https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2
-> Rolling back https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2
-> Rolled back https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2
Exception in thread "main" java.nio.file.FileSystemException: /usr/share/elasticsearch/config/analysis-ik: Operation not permitted
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixFileAttributeViews$Posix.setOwners(UnixFileAttributeViews.java:291)
at java.base/sun.nio.fs.UnixFileAttributeViews$Posix.setOwner(UnixFileAttributeViews.java:313)
at org.elasticsearch.plugins.cli.InstallPluginAction.setOwnerGroup(InstallPluginAction.java:1077)
at org.elasticsearch.plugins.cli.InstallPluginAction.installConfig(InstallPluginAction.java:1051)
at org.elasticsearch.plugins.cli.InstallPluginAction.installPluginSupportFiles(InstallPluginAction.java:974)
at org.elasticsearch.plugins.cli.InstallPluginAction.installPlugin(InstallPluginAction.java:943)
at org.elasticsearch.plugins.cli.InstallPluginAction.execute(InstallPluginAction.java:254)
at org.elasticsearch.plugins.cli.InstallPluginCommand.execute(InstallPluginCommand.java:89)
at org.elasticsearch.common.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:54)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:85)
at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:94)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:85)
at org.elasticsearch.cli.Command.main(Command.java:50)
at org.elasticsearch.launcher.CliToolLauncher.main(CliToolLauncher.java:64)
解决方案:以root用户进入容器安装,docker exec -u 0 -it elasticsearch /bin/bash