报错示例: 

docker启动elasticsearch异常Exception in thread "main" java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config/jvm.options

hdback-elasticsearch_1  | Exception in thread "main" java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config/jvm.options
hdback-elasticsearch_1  | 	at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
hdback-elasticsearch_1  | 	at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
hdback-elasticsearch_1  | 	at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
hdback-elasticsearch_1  | 	at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:215)
hdback-elasticsearch_1  | 	at java.base/java.nio.file.Files.newByteChannel(Files.java:369)
hdback-elasticsearch_1  | 	at java.base/java.nio.file.Files.newByteChannel(Files.java:415)
hdback-elasticsearch_1  | 	at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
hdback-elasticsearch_1  | 	at java.base/java.nio.file.Files.newInputStream(Files.java:154)
hdback-elasticsearch_1  | 	at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:60)
docker_hdback-elasticsearch_1 exited with code 1

原因总结:

由于我的elasticsearch启动时使用的是docker-compose方式,并配置了config目录的挂载数据卷,而启动时宿主机的挂载数据文件夹中并没有jvm.options文件,因此出现该文件找不到的情况。

解决办法:

先将挂载数据卷配置注释,启动elasticsearch后将elasticsearch容器中的config/文件夹下的文件拷出到宿主机,重新启动即可。

1.将容器中文件拷出到宿主机挂载卷文件夹下

docker cp [容器ID]:容器文件路径  要拷贝的宿主机路径

例如我的:

docker cp 2a202fa:/usr/share/elasticsearch/plugins/ ./es/es-with-ik-plugins/

2.开启挂载卷配置,重新启动elasticsearch

PS 举一反三: 

如果启动容器时出现文件找不到,首先关闭挂载卷配置,启动尝试,若没问题,即可判断是因为挂在卷文件不充足原因,按照上述方式解决即可。

还有一种情况是读写权限问题,给自己的挂在卷赋权限即可,类似的情况如:docker启动elasticsearch异常Failed to create node environment(解决)

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐