docker启动elasticsearch安装plugins之后报错读取不到文件
情景再现:启动docker 下的elasticsearch 通过run命令实现指定路径挂载
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx1024m" \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.17.3
```bash
docker ps #没有发现elasticsearch
docker ps -a #发现其处于未启动状态
查看日志
docker logs elasticsearch
报错信息如下:
Exception in thread “main” java.nio.file.NotDirectoryException: /usr/share/elasticsearch/plugins/commons-codec-1.9.jar
排查
1、检查docker中plugins目录的挂载路径是否正确
2、检查文件权限是否可读可写,可以使用以下命令赋权
chmod -R 777 filepath #filepath 是docker内的plugins挂载到本机的路径
3、注意plugins目录下应该只有解压好的插件,不能直接存放下载的包,需要通过unzip解压成文件夹,并且把下载的包删掉。它会读取plugins下的所有内容当成文件夹读取,把未解压的包当成文件夹处理就会报错,即这个包下面找不到文件
[root@LWZCentOS ~]# docker logs elasticsearch
Exception in thread "main" java.nio.file.NotDirectoryException: /usr/share/elasticsearch/plugins/commons-codec-1.9.jar
at java.base/sun.nio.fs.UnixFileSystemProvider.newDirectoryStream(UnixFileSystemProvider.java:439)
at java.base/java.nio.file.Files.newDirectoryStream(Files.java:482)
at java.base/java.nio.file.Files.list(Files.java:3793)
at org.elasticsearch.tools.launchers.BootstrapJvmOptions.getPluginInfo(BootstrapJvmOptions.java:49)
at org.elasticsearch.tools.launchers.BootstrapJvmOptions.bootstrapJvmOptions(BootstrapJvmOptions.java:34)
at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:137)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:86)
[root@LWZCentOS ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@LWZCentOS ~]# docker rm elasticsearch
elasticsearch