Linux Docker 安装 ElasticSearch和ik分词器

171 阅读2分钟

a)  安装ElasticSearch

1、搜索ElasticSearch

docker search elasticsearch

2、下载镜像

docker pull elasticsearch:7.12.0

3、  创建elasticsearch及其相关目录

mkdir /usr/local/docker/elasticsearch

mkdir /usr/local/docker/elasticsearch/data

mkdir /usr/local/docker/elasticsearch/logs

mkdir /usr/local/docker/elasticsearch/plugins

3、  启动ElasticSearch

docker run \
--name elasticsearch \
-e "ES\_JAVA\_OPTS=-Xms1024m -Xmx1024m" \
-e "discovery.type=single-node" \
-v /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /usr/local/docker/elasticsearch/plugins\:/usr/share/elasticsearch/plugins \
--privileged \
-p 9200:9200 \
-p 9300:9300 \
-d elasticsearch:7.12.0

命令说明:

● -e "cluster.name=es-docker-cluster":设置集群名称

● -e "http.host=0.0.0.0":监听的地址,可以外网访问

● -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小

● -e "discovery.type=single-node":非集群模式

● -v /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定elasticsearch的数据目录

● -v /usr/local/docker/elasticsearch/logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定elasticsearch的日志目录

● -v /usr/local/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定elasticsearch的插件目录

● --privileged:授予逻辑卷访问权

● --network itmentu-net :加入一个名为itmentu-net的网络中

● -p 9200:9200:端口映射配置

启动时可能会发现服务没有启动成功

image.png

此时使用docker logs     查看日志

    {"type": "server", "timestamp": "2024-03-25T06:59:28,045Z", "level": "ERROR", "component": "o.e.b.ElasticsearchUncaughtExceptionHandler", "cluster.name": "docker-cluster", "node.name": "24ac2aec2675", "message": "uncaught exception in thread [main]", 
    "stacktrace": ["org.elasticsearch.bootstrap.StartupException: ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];",    "at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-7.12.0.jar:7.12.0]",    "at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-7.12.0.jar:7.12.0]",    "at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:75) ~[elasticsearch-7.12.0.jar:7.12.0]",    "at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:116) ~[elasticsearch-cli-7.12.0.jar:7.12.0]",    "at org.elasticsearch.cli.Command.main(Command.java:79) ~[elasticsearch-cli-7.12.0.jar:7.12.0]",    "at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) ~[elasticsearch-7.12.0.jar:7.12.0]",    "at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:81) ~[elasticsearch-7.12.0.jar:7.12.0]",    "Caused by: org.elasticsearch.ElasticsearchException: failed to bind service",    "at org.elasticsearch.node.Node.<init>(Node.java:744) ~[elasticsearch-7.12.0.jar:7.12.0]",    uncaught exception in thread [main]
    "at org.elasticsearch.node.Node.<init>(Node.java:278) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:217) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:217) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:397) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "... 6 more",
    "Caused byjava.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes",
    "at sun.nio.fs.UnixException.translateToIOException(UnixException.java:90) ~[?:?]",
    "at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106) ~[?:?]",
    "at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) ~[?:?]",
    "at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:388) ~[?:?]",
    "at java.nio.file.Files.createDirectory(Files.java:694) ~[?:?]",
    "at java.nio.file.Files.createAndCheckIsDirectory(Files.java:801) ~[?:?]",
    "at java.nio.file.Files.createDirectories(Files.java:787) ~[?:?]",
    "at org.elasticsearch.env.NodeEnvironment.lambda$new$0(NodeEnvironment.java:265) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:202) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:262) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.node.Node.<init>(Node.java:352) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.node.Node.<init>(Node.java:278) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:217) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:217) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:397) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.12.0.jar:7.12.0]",
    "... 6 more"] }
    ElasticsearchException[failed to bind service]nestedAccessDeniedException[/usr/share/elasticsearch/data/nodes];
    Likely root causejava.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
    	at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
    	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.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:388)
    	at java.base/java.nio.file.Files.createDirectory(Files.java:694)
    	at java.base/java.nio.file.Files.createAndCheckIsDirectory(Files.java:801)
    	at java.base/java.nio.file.Files.createDirectories(Files.java:787)
    	at org.elasticsearch.env.NodeEnvironment.lambda$new$0(NodeEnvironment.java:265)
    	at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:202)
    	at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:262)
    	at org.elasticsearch.node.Node.<init>(Node.java:352)
    	at org.elasticsearch.node.Node.<init>(Node.java:278)
    	at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:217)
    	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:217)
    	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:397)
    	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159)
    	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150)
    	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:75)
    	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:116)
    	at org.elasticsearch.cli.Command.main(Command.java:79)
    	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115)
    	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:81)
    For complete error detailsrefer to the log at /usr/share/elasticsearch/logs/docker-cluster.log

image.png 报错原因是因为文件夹权限不够,需要修改文件夹权限

使用 ll 命令查询elasticsearch文件夹权限

image.png

使用命令修改文件夹及其自目录权限:

chmod 777 /usr/local/docker/elasticsearch/**

image.png 再次执行命令

使用docker ps命令查看是否执行成功。

b)  安装ik分词器

进入github中下载对应版本的ik分词器,github.com/infinilabs/…

image.png

下载好后解压,上传到 /usr/local/docker/elasticsearch/plugins 目录下,文件名改为ik;

image.png

重启elasticsearch

docker restart elasticsearch