当前位置: 首页 > 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 中显示物体线框主要基于图形渲染管线和特定的渲染模式。 要显示物体的线框,通常有两种常见的方法:一种是利用内置的渲染…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM&#xff09…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法

使用 ROS1-Noetic 和 mavros v1.20.1, 携带经纬度海拔的话题主要有三个: /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码,来分析他们的发布过程。发现前两个话题都对应了同一…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...