当前位置: 首页 > news >正文

Docker 容器 Elasticsearch 启动失败完整排查记录

背景

在服务器上运行 Docker 容器 es3,但 Elasticsearch 无法正常启动,运行 docker ps -a 发现 es3 处于 Exited (1) 状态,即进程异常退出。

本次排查从错误日志、容器挂载、权限问题、SELinux 影响、内核参数等多个方面入手,最终成功解决问题。

本文将详细记录整个排查过程,方便未来遇到类似问题时可以快速定位并解决。


问题描述

尝试进入 es3 容器时,报错:

docker exec -it es3 bash
Error response from daemon: Container 061588b201eb42a339add01209829ae7a3f09915160a6fd82a22ce5a2c05a6c8 is not running

这表明容器 es3 处于退出状态,无法直接进入。

运行 docker ps -a 发现:

CONTAINER ID   IMAGE                                                  COMMAND                  CREATED        STATUS                      PORTS                                           NAMES
061588b201eb   docker.elastic.co/elasticsearch/elasticsearch:7.15.0   "/bin/tini -- /usr/l…"   9 months ago   Exited (1) 8 minutes ago                                                    es3

查看 docker logs es3,发现错误:

ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];
Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes

这是典型的权限问题,Elasticsearch 无法访问 /usr/share/elasticsearch/data/nodes 目录,导致启动失败。


详细排查过程

步骤 1:检查 Elasticsearch 容器的挂载目录

运行以下命令查看 es3 容器的挂载信息:

docker inspect es3 | grep -i Mounts -A 10

输出:

"Mounts": [{"Type": "bind","Source": "/data/es","Destination": "/usr/share/elasticsearch/data","Mode": "rw","RW": true}
]

分析:

  • Source 表示宿主机上的数据目录 /data/es 被绑定到了容器内部的 /usr/share/elasticsearch/data
  • RW: true 表示该挂载是读写权限,但仍可能存在宿主机目录权限不足导致容器内部访问失败。

步骤 2:检查宿主机目录权限

手动检查 /data/es 目录权限:

ls -ld /data/es

发现权限不正确:

drwx------ 2 root root 4096 Feb 7 12:00 /data/es

这个目录的所有者是 root,而 Elasticsearch 容器通常使用 uid=1000 运行,所以无法访问该目录。

解决方案:修改宿主机目录权限

执行以下命令,给 /data/es 目录赋予正确权限:

sudo chmod -R 777 /data/es
sudo chown -R 1000:1000 /data/es  # 确保 Elasticsearch 运行用户可以访问

然后重新启动容器:

docker restart es3

如果 docker logs es3 仍然报错,则继续排查。


步骤 3:检查 SELinux 是否影响容器挂载

在 RHEL/CentOS 服务器上,SELinux 可能会阻止 Docker 容器访问宿主机目录。

检查 SELinux 状态

sestatus

如果输出:

SELinux status: enabled

则说明 SELinux 可能影响了容器的数据目录挂载。

解决方案:

sudo setenforce 0  # 临时禁用 SELinux
docker restart es3

如果这样可以成功启动 Elasticsearch,则可以通过以下命令让 SELinux 允许容器访问:

sudo chcon -R -t container_file_t /data/es

步骤 4:调整 Elasticsearch 运行所需的内核参数

Elasticsearch 需要 vm.max_map_count 参数足够大,否则可能启动失败。

检查当前值

sysctl -n vm.max_map_count

如果值低于 262144,执行:

sudo sysctl -w vm.max_map_count=262144

并让其永久生效:

echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

然后重新启动 es3

docker restart es3

步骤 5:进入容器手动检查目录权限

如果 es3 依然无法启动,可以手动进入容器内进行检查:

docker start es3
docker exec -it es3 bash
ls -lah /usr/share/elasticsearch/data

如果权限不正确:

chmod -R 777 /usr/share/elasticsearch/data
chown -R 1000:1000 /usr/share/elasticsearch/data

然后退出容器并重启:

exit
docker restart es3

步骤 6:查看 Elasticsearch 详细日志

如果仍然无法启动,查看完整日志:

docker logs es3 --tail 50

或者进入容器内部查看:

docker exec -it es3 bash
cat /usr/share/elasticsearch/logs/es-cluster1.log | tail -50

分析日志信息,找出可能的错误信息并针对性解决。


最终总结

本次排查经历了以下几个关键步骤:

  1. 检查容器挂载信息,确认 SourceDestination 绑定正确。
  2. 修复宿主机目录权限,确保 /data/es 可被 uid=1000 访问。
  3. 排查 SELinux 影响,临时禁用或永久授权容器访问数据目录。
  4. 调整 vm.max_map_count 参数,确保符合 Elasticsearch 运行要求。
  5. 进入容器检查目录权限,确保 /usr/share/elasticsearch/data 目录可读写。
  6. 查看完整日志,针对具体错误信息进行修复。

最终,成功让 es3 容器恢复正常运行 🎉🎉!


经验总结

  1. 遇到 Elasticsearch 容器无法启动时,不要直接删除容器,而是先排查原因!
  2. 容器挂载目录的权限问题是常见错误,chown -R 1000:1000 通常能解决。
  3. SELinux 可能影响 Docker 挂载,如果启用了 SELinux,需额外处理挂载目录的安全上下文。
  4. 调整 vm.max_map_count 以符合 Elasticsearch 运行要求。
  5. 详细日志是最终解决问题的关键,一定要查看 docker logses-cluster1.log

相关文章:

Docker 容器 Elasticsearch 启动失败完整排查记录

背景 在服务器上运行 Docker 容器 es3,但 Elasticsearch 无法正常启动,运行 docker ps -a 发现 es3 处于 Exited (1) 状态,即进程异常退出。 本次排查从错误日志、容器挂载、权限问题、SELinux 影响、内核参数等多个方面入手,最…...

达梦数据使用笔记

相关文档: 达梦官网 达梦技术文档 1.安装完成后在开始菜单中搜索DM 目录:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\达梦数据库 下有所有相关信息 2.数据迁移 https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html https:…...

操作系统中的任务调度算法

一、引言 在操作系统中,任务调度算法是核心组件之一,它负责合理分配有限的 CPU 资源,以确保系统的高效运行和良好的用户体验。任务调度的目标是实现公平性、最小化等待时间、提高系统吞吐量,并最大化 CPU 的利用率。不同的任务调…...

Linux 虚拟服务器(LVS)技术详解

一、LVS 概述 Linux 虚拟服务器(Linux Virtual Server,简称 LVS)是由章文嵩博士开发的一种开源的服务器集群技术,它工作在 Linux 内核空间,为构建高可用、可扩展的网络服务提供了一种高效的解决方案。LVS 可以将多个真…...

AIoT时代来临,物联网技术如何颠覆未来生活?

在这个万物互联的时代,“物联网”(IoT)正以前所未有的速度改变我们的生活,而“AIoT”则是在物联网基础上融入人工智能技术,赋予设备更高的智能和自主决策能力。随着5G、边缘计算和云技术的不断发展,物联网正…...

C++17 新特性解析

C++17 是 C++ 标准的一个重要更新,它在 C++11/14 的基础上引入了许多新特性,进一步简化了代码编写、提升了性能和类型安全性。以下是 C++17 的主要特性分类介绍: 一、语言核心改进 1. 结构化绑定(Structured Bindings) 允许将元组、结构体或数组的成员直接解包到变量中。…...

嵌入式软件C语言面试常见问题及答案解析(四)

嵌入式软件C语言面试常见问题及答案解析(四) 原本打算将链表相关的面试题整合到一个文档中,奈何写着写着就发现题目比较多,题型也比较丰富,所以导致上一篇已经足够长了,再长也就有点不礼貌了。 所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者…...

在 C# 中,处理 Excel 和 PDF 文件的库有很多。以下是一些比较常用的选择

读取 Excel 文件的库 NPOI 用途:可以读取和写入 .xls 和 .xlsx 文件。特点:无需安装 Microsoft Office,支持简单的 Excel 操作,如格式化、公式、图表等。 EPPlus 用途:主要用于 .xlsx 格式(Excel 2007 及以…...

绩效归因概述

绩效归因概述 1. 分类2. 基于净值的归因方法2.1 发展背景2.2 择时选股模型 T-M模型2.3 择时选股模型 H-M模型2.4 择时选股模型 C-L模型2.5 风格配置模型-Sharpe2.6 多因子模型 Fama-French32.7 多因子模型 Carhart42.8 多因子模型 Fama-French5 3. 基于持仓的归因方法3.1 发展背…...

Spring Boot 中加载多个 YAML 配置文件

在 Spring Boot 中加载多个 YAML 配置文件是一个常见的需求,通常用于将配置信息分离到多个文件中以便于管理和维护。Spring Boot 提供了灵活的方式来加载多个 YAML 配置文件。 以下是一些方法和步骤,用于在 Spring Boot 应用中加载多个 YAML 配置文件&a…...

厚植创新实力、聚焦生物科技:柏强制药的责任与机遇

在当今快速发展的医药行业中,创新已成为企业竞争的核心动力。贵州柏强制药作为医药领域的佼佼者,正以科技创新为引领,聚焦生物科技领域,不断突破,不仅为人民的健康事业贡献力量,更在激烈的市场竞争中抓住了…...

Linux中getifaddrs函数

文章目录 **函数原型****参数****返回值****释放资源****`struct ifaddrs` 结构****示例代码****输出示例****相关函数****总结**getifaddrs 是 Linux(以及其他 Unix-like 系统)中用于获取本机网络接口信息的系统调用。它提供了一种简单的方法来获取所有网络接口的地址信息,…...

【HarmonyOS Next 自定义可拖拽image】

效果图: 代码: import display from "ohos.display" import { AppUtil } from "pura/harmony-utils"/*** 自定义可拖拽图标组件*/ Component export default struct DraggableImage {imageResource?: ResourceimageHeight: numbe…...

解决No module named ‘llama_index.llms.huggingface‘

执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报…...

SearchBar组件的功能与用法

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"Material3中的IconButton"相关的内容,本章回中将介绍SearchBar组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…...

13.推荐系统的性能优化

接下来我们将学习推荐系统的性能优化。推荐系统的性能优化对于提升推荐结果的生成速度和系统的可扩展性至关重要,尤其是在处理大规模数据和高并发请求时。在这一课中,我们将介绍以下内容: 性能优化的重要性常见的性能优化方法实践示例 1. 性…...

Grafana-使用Button修改MySQL数据库

背景 众所周知,Grafana是一个用来展示数据的平台,但是有时候还是会有需求说能不能有一个按钮,点击的时候再对数据库进行修改,从而达到更新数据的效果 经过多方查证,终于实现了一个简单的,点击button执行sq…...

飞科FH6218电吹风异响维修

前言 本文仅记录一次普通的维修经历,解决方案也都是从网上查找资料得来,仅供参考,如有不对请指出,谢谢! 现象 使用时出现异响,风速越大越响 参考视频 https://www.bilibili.com/video/BV1dD4y1x7hH/?…...

分治下的快速排序(典型算法思想)—— OJ例题算法解析思路

目录 一、75. 颜色分类 - 力扣(LeetCode) 运行代码: 一、算法核心思想 二、指针语义与分区逻辑 三、操作流程详解 四、数学正确性证明 五、实例推演(数组[2,0,2,1,1,0]) 六、工程实践优势 七、对比传统实现 八、潜在问题与解决方案 九、性能测试数据 十、扩展…...

Unity3D实现显示模型线框(shader)

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示👉二、第一种方式👉二、第二种方式👉壁纸分享👉总结👉前言 在 Unity 中显示物体线框主要基于图形渲染管线和特定的渲染模式。 要显示物体的线框,通常有两种常见的方法:一种是利用内置的渲染…...

PP-DocLayoutV3实操手册:display_formula公式块检测准确率提升的3个微调技巧

PP-DocLayoutV3实操手册:display_formula公式块检测准确率提升的3个微调技巧 1. 引言:为什么公式检测这么重要? 在文档数字化处理过程中,数学公式的准确检测一直是个技术难点。传统的OCR系统往往把公式误判为普通文本或图像&…...

LVGL V8项目实战:手把手教你用CLion配置CMake,集成Gui Guider生成的UI文件(含避坑指南)

LVGL V8项目实战:CLion与CMake深度集成Gui Guider UI文件的完整指南 当你在嵌入式GUI开发中频繁往返于设计工具与代码编辑器之间时,是否经历过这样的困境:在Gui Guider中精心设计的界面,移植到LVGL项目后却遭遇编译错误、资源路径…...

30 分钟搞定答辩 PPT!Paperxie AI 生成器:拯救论文人的「熬夜克星」

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 一、答辩 PPT 惨案现场:你是不是也在为这四件事崩溃? 论文查重通过的那一刻,你以为终于能…...

科研人必备:用浏览器插件给IEEEXplore做个‘小手术’,告别20秒加载

科研效率革命:用浏览器插件精准优化IEEEXplore访问体验 每次打开IEEEXplore文献库,那个转不停的加载图标是否让你焦躁不安?作为每天要与学术数据库打交道的科研工作者,20秒的等待时间足以打断思考流,降低工作效率。这背…...

AI专著写作快车道:特色工具大集合,助力科研成果出版

学术专著写作困境与AI工具助力 学术专著的写作并不只是简单的“写出来”,更在于能否顺利“出版、得到认可”。在当前的出版市场,学术专著的受众本就相对有限,因此出版社对学术价值和作者的影响力要求非常高。许多作者虽然完成了初稿&#xf…...

掌握TegraRcmGUI:从入门到精通的Switch注入实践指南

掌握TegraRcmGUI:从入门到精通的Switch注入实践指南 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款基于C开发的图形化界面工具…...

Ostrakon-VL终端实战:从扫码识别到生成抖音短视频脚本的创意延伸

Ostrakon-VL终端实战:从扫码识别到生成抖音短视频脚本的创意延伸 1. 像素特工终端介绍 想象你是一名零售侦探,手持的不是笨重的扫描枪,而是一个充满复古游戏风格的AI终端。这就是基于Ostrakon-VL-8B模型开发的像素风格交互界面,…...

抖音无水印下载完全指南:5分钟掌握批量下载核心技巧

抖音无水印下载完全指南:5分钟掌握批量下载核心技巧 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

ARMv8汇编指令实战解析:adrp、adr与adr_l在Linux内核启动中的应用

1. ARMv8寻址指令家族概览 在ARMv8架构中,adrp、adr和adr_l这三个指令堪称地址计算的"三剑客"。它们虽然名字相似,但各自有着独特的设计哲学和应用场景。就像搬家时选择不同的交通工具——adr是短途搬运的小推车,adrp是能承载重物的…...

Heygem数字人系统效果展示:看一段音频如何驱动多个数字人视频

Heygem数字人系统效果展示:看一段音频如何驱动多个数字人视频 1. 系统核心能力概览 Heygem数字人视频生成系统批量版webui版是一款基于AI技术的创新工具,能够将单一音频源同步驱动多个数字人视频生成。系统采用先进的语音驱动口型同步技术,…...