elasticsearch Docker启动Device or resource busy异常

问题

在基于Docker进行elasticsearch部署启动时,指定了elasticsearch.yml配置文件,但在启动时报如下异常:

bash 复制代码
Exception in thread "main" java.nio.file.FileSystemException: /usr/share/elasticsearch/config/elasticsearch.yml.cvrM1wfsRz-M7StPG7vFHw.tmp -> /usr/share/elasticsearch/config/elasticsearch.yml: Device or resource busy

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.UnixCopyFile.move(UnixCopyFile.java:416)

at java.base/sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:266)

at java.base/java.nio.file.Files.move(Files.java:1432)

at org.elasticsearch.xpack.security.cli.AutoConfigureNode.fullyWriteFile(AutoConfigureNode.java:1136)

at org.elasticsearch.xpack.security.cli.AutoConfigureNode.fullyWriteFile(AutoConfigureNode.java:1148)

at org.elasticsearch.xpack.security.cli.AutoConfigureNode.execute(AutoConfigureNode.java:687)

at org.elasticsearch.common.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:81)

at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112)

at org.elasticsearch.cli.Command.main(Command.java:77)

at org.elasticsearch.xpack.security.cli.AutoConfigureNode.main(AutoConfigureNode.java:157)

对应的elasticsearch版本为elasticsearch:8.13.0。

解决方案

方案一:采用默认的elasticsearch.yml,不自行进行指定。

启动命令如下:

bash 复制代码
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms84m -Xmx512m" \
-v /Users/ershixiong/work/develop/soft/es/data:/usr/share/elasticsearch/data \
-v /Users/ershixiong/work/develop/soft/es/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:8.13.0

方案二:有可能是elasticsearch.yml中配置错误。

常见错误一:elasticsearch.yml中配置格式错误,比如:

bash 复制代码
http.host:0.0.0.0

上述配置中,冒号后面缺少空格,标准的格式是应该有空格的。

常见错误二:参数配置错误。

还以上述为例:

bash 复制代码
http.host: 0.0.0.0

上述配置虽然格式挣钱,但貌似在该版本中并不支持该配置项目,而需要改为:

bash 复制代码
network.host: 0.0.0.0

改为上述配置便可正常启动。同时需要注意的是,在该版本中,上述配置是默认的配置,所以可以不用进行指定配置。

方案三:设置bootstrap.memory_lock参数为true

在启动命令时,设置bootstrap.memory_lock参数为true:

bash 复制代码
-e "bootstrap.memory_lock=true"
相关推荐
渣渣盟6 分钟前
Docker 运维常用命令手册(含扩容与实战)
运维·docker·容器
小尘要自信20 分钟前
小米摄像头怎么接入RTSP?Go2RTC转流、EasyNVR录像与公网访问教程
人工智能·docker·开源
我叫张小白。2 小时前
一个微服务电商+社区项目(瓷韵app)的技术深度复盘
docker·微服务·云原生·架构
程序员老油条16 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
大侠锅锅18 小时前
第 4 篇:策略模式实践——用统一接口管理 Docker 容器、原生进程与 K3s Pod
docker·容器·边缘计算·策略模式·iot
小蓝波20 小时前
docker 的命令
java·docker·容器
利威尔·21 小时前
常用git命令
大数据·elasticsearch·搜索引擎
2301_801184751 天前
docker 工作
java·docker·容器
至乐活着1 天前
ELK日志系统从零搭建到实战:Nginx日志采集与可视化全攻略
nginx·elk·elasticsearch·docker·日志系统
想你依然心痛1 天前
AtomCode 在 DevOps 场景中的实战:CI/CD 流水线脚本自动生成
运维·ci/cd·docker·devops·自动化部署·github actions