docker安装的es报错了?failed to obtain node locks怎么破~

目录

一、问题分析

[1.1 按惯例上报错](#1.1 按惯例上报错)

二、问题定位

2.1检查并修改数据目录权限

2.2检查权限

[2.3清理 node.lock 文件](#2.3清理 node.lock 文件)

2.4然后重启

三、实操检查

3.1检查权限

3.2执行指令

3.3检查

3.4再次启动

3.5检查一下端口

四、补充


一、问题分析

1.1 按惯例上报错

failed to obtain lock on /usr/share/elasticsearch/data这句是关键!

复制代码
Caused by: java.io.IOException: failed to obtain lock on /usr/share/elasticsearch/data
Caused by: java.nio.file.NoSuchFileException: /usr/share/elasticsearch/data/node.lock
org.elasticsearch.server@8.6.2/org.elasticsearch.env.NodeEnvironment$NodeLock.<init>Suppressed: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/node.lockjava.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
milvus-elasticsearch | ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/docker-cluster.log

Elasticsearch(ES)容器启动失败,错误日志显示 failed to obtain node locks,可能的原因包括:

  1. 数据目录不可写 :ES 需要对 /usr/share/elasticsearch/data 目录有写权限,但容器可能没有足够权限。
  2. 已有 ES 进程占用锁文件 :如果之前的 ES 实例没有正确关闭,可能导致 node.lock 文件存在,阻止新的实例启动。
  3. Docker 挂载目录问题 :如果你将 data 目录挂载到了宿主机,宿主机上的目录权限可能导致容器无法访问。

二、问题定位

2.1检查并修改数据目录权限

如果你挂载了本地目录作为 ES 数据目录,尝试执行:

复制代码
sudo chmod -R 777 /your/local/path/to/data

或者,如果你不确定挂载了哪个目录,可以先进入容器:

复制代码
docker exec -it milvus-elasticsearch bash ls -ld /usr/share/elasticsearch/data

2.2检查权限

这里检查的权限是要根据你docker-compose.yml里的配置去检查,比如我的配置是有挂载到/home/docker/milvus/volumes/elasticsearch/这个目录。

复制代码
ls -ld /home/docker/milvus/volumes/elasticsearch

如果权限不足,可以尝试:

复制代码
chmod -R 777 /usr/share/elasticsearch/data

2.3清理 node.lock 文件

可能是 node.lock 文件阻止 Elasticsearch 启动,删除它:

复制代码
sudo rm -f /home/docker/milvus/volumes/elasticsearch/node.lock

2.4然后重启

docker restart milvus-elasticsearch

三、实操检查

3.1检查权限

注意:显示的所有者是root,那我们就要修改为 1000:1000因为它是Elasticsearch 默认的 UID 和 GID。

3.2执行指令

复制代码
sudo chown -R 1000:1000 /home/docker/milvus/volumes/elasticsearch
sudo chmod -R 777 /home/docker/milvus/volumes/elasticsearch

3.3检查

复制代码
ls -ld /home/docker/milvus/volumes/elasticsearch

3.4再次启动

docker-compose down

docker-compose up -d

复制代码
docker-compose up #这可以跟踪日志
docker-compose up -d #后台运行

3.5检查一下端口

四、补充

  • ls -ld /home/docker/milvus/volumes/elasticsearch 输出
  • docker logs milvus-elasticsearch 最新错误日志
  • docker inspect milvus-elasticsearch 的输出信息
相关推荐
Java陈序员4 小时前
代码检测器!一款专门揭露屎山代码的质量分析工具!
docker·go
月屯4 小时前
es大页读取
大数据·elasticsearch·搜索引擎
lijun_xiao20095 小时前
DevOps(devops/k8s/docker/Linux)学习笔记-2
docker·kubernetes·devops
pedestrian_h6 小时前
docker快速上手笔记
笔记·docker·容器
老黄编程7 小时前
配置镜像仓库镜像(Registry Mirror)的指南
docker
掘根7 小时前
【Docker】容器操作和实战
运维·docker·容器
奔跑吧 android10 小时前
【Docker】【2.docker 安装 ubuntu 桌面版】
ubuntu·docker·容器
头发那是一根不剩了12 小时前
Docker Desktop 安装教程和最佳实践
运维·docker·容器
janthinasnail13 小时前
使用Docker搭建Swagger接口文档工具
docker·api接口文档
半梦半醒*14 小时前
k8s——services资源+pod详解1
linux·运维·docker·kubernetes·centos·负载均衡