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
分析日志信息,找出可能的错误信息并针对性解决。
最终总结
本次排查经历了以下几个关键步骤:
- 检查容器挂载信息,确认
Source和Destination绑定正确。 - 修复宿主机目录权限,确保
/data/es可被uid=1000访问。 - 排查 SELinux 影响,临时禁用或永久授权容器访问数据目录。
- 调整
vm.max_map_count参数,确保符合 Elasticsearch 运行要求。 - 进入容器检查目录权限,确保
/usr/share/elasticsearch/data目录可读写。 - 查看完整日志,针对具体错误信息进行修复。
最终,成功让 es3 容器恢复正常运行 🎉🎉!
经验总结
- 遇到 Elasticsearch 容器无法启动时,不要直接删除容器,而是先排查原因!
- 容器挂载目录的权限问题是常见错误,
chown -R 1000:1000通常能解决。 - SELinux 可能影响 Docker 挂载,如果启用了 SELinux,需额外处理挂载目录的安全上下文。
- 调整
vm.max_map_count以符合 Elasticsearch 运行要求。 - 详细日志是最终解决问题的关键,一定要查看
docker logs和es-cluster1.log。
相关文章:
Docker 容器 Elasticsearch 启动失败完整排查记录
背景 在服务器上运行 Docker 容器 es3,但 Elasticsearch 无法正常启动,运行 docker ps -a 发现 es3 处于 Exited (1) 状态,即进程异常退出。 本次排查从错误日志、容器挂载、权限问题、SELinux 影响、内核参数等多个方面入手,最…...
离线安装Appium Server
1、问题概述? 安装Appium通常有两种方式: 第一种:下载exe安装包,这种是Appium Server GUI安装方式,缺点是通过命令启动不方便。 第二种:通过cmd安装appium server,可以通过命令方式启动,比较方便。 问题:在没有外网的情况下,无法通过命令在cmd中安装appium server…...
Vite 打包原理
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
目前推荐的优秀编程学习网站与资源平台,涵盖不同学习方式和受众需求
一、综合教程与互动学习平台 菜鸟教程 特点:适合零基础新手,提供免费编程语言教程(Python、Java、C/C++、前端等),页面简洁且包含大量代码示例,支持快速上手。适用人群:编程入门者、需要快速查阅语法基础的学习者。W3Schools 特点:专注于Web开发技术(HTML、CSS、JavaS…...
【大模型】Ubuntu下安装ollama,DeepSseek-R1:32b的本地部署和运行
1 ollama 的安装与设置 ollama官网链接:https://ollama.com/ 在左上角的【Models】中展示了ollama支持的模型在正中间的【Download】中课可以下载支持平台中的安装包。 其安装和模型路径配置操作流程如下: ollama的安装 这里选择命令安装curl -fsSL …...
蓝桥杯---力扣题库第38题目解析
文章目录 1.题目重述2.外观数列举例说明3.思路分析(双指针模拟)4.代码说明 1.题目重述 外观数列实际上就是给你一串数字,我们需要对于这个数据进行一个简单的描述罢了; 2.外观数列举例说明 外观数列都是从1开始的,也…...
oCam:免费且强大的录屏软件
今天给大家推荐一个非常好的录屏软件。几乎可以满足你日常工作的需求。而且软件完全免费,没有任何的广告。 oCam:免费且强大的录屏软件 oCam是一款功能强大的免费录屏软件,支持屏幕录制、游戏录制和音频录制等多种模式,能够满足不…...
Day81:数据的保存
在编程中,数据保存是非常重要的,它使得程序能够持久化存储数据,并在程序重启后继续使用。这一节,我们将介绍如何使用 Python 来保存数据,涉及常见的几种方式,包括将数据保存到文件中、使用数据库等方法。 1. 保存数据到文本文件 文本文件是最常用的数据存储方式之一。你…...
苍穹外卖 项目记录 day11 Spring Task订单定时处理-来单提醒-客户催单
文章目录 Spring Taskcron表达式Spring Task使用步骤订单状态定时处理WebSocketWebSockt入门示例来单提醒客户催单 Spring Task Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 应用场景: 1). 信用卡每月还款…...
【GitLab CI/CD 实践】从 0 到 1 搭建高效自动化部署流程
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
Django开发入门 – 1.搭建基于Python Web框架Django的IDE开发环境
Django开发入门 – 1.搭建基于Python Web框架Django的IDE开发环境 Build A Integrated Development Environment(IDE) for Python Web Framework - django By JacksonML 1. 获取及安装最新版Python 打开Chrome浏览器,访问Python官网链接:https://www…...
【Java基础】序列化、反序列化和不可变类
Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:Java基础面经 📚本系列文章为个…...
R语言 文本分析 天龙八部
起因, 目的: 前面有人对 “倚天屠龙记” 进行分析,我这里只是进行模仿而已。 完整的文件, 已经绑定了,反正读者可以找一下。 案例背景 小说《天龙八部》是金庸先生所著的武侠小说,也是“射雕三部曲”的前传。全书共50章,字数超过一百万字。故事发生在北宋末年,以大理…...
Gradle 发布Jar到 Maven Central
1. 前置步骤 自 2024 年 3 月 12 日起,所有注册和发布都将通过 Central Portal 进行。 Central Portal 帐户注册命名空间可用于对工件进行签名的 GPG 密钥 1. 创建 GPG 密钥对 2. 分发公钥 更多教程参考本文: 如何发布jar包到maven中央仓库(2024年3月最…...
小米6的ubantu touch 怎么安装docker
deekseek 真的太牛逼了。 小米6的ubantu touch 怎么安装docker? Thought for 19 seconds 嗯,用户问的是在小米6上安装Ubuntu Touch后如何安装Docker。首先,我需要确认Ubuntu Touch的版本是否支持Docker。Ubuntu Touch是基于Ubuntu的移动操作…...
USB子系统学习(四)使用libusb读取鼠标数据
文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试 1、声明 本文是在学习韦东山《驱动大全》USB子系统时,为梳理知识点和自己回看而记录,全部内容高度复制粘贴。 韦老师的《驱动大全》:商品详情 …...
深度剖析 Redisson 分布式锁:原理、实现与应用实践
文章目录 写在文章开头详解Redisson 分布式锁使用和实现前置准备工作分布式锁的基本使用公平锁的使用联锁的使用读写锁基本使用常见问题Redisson和Jedis有什么区别redisson如何实现分布式锁redisson如何实现分布式锁的可重入redisson如何实现公平锁Redisson的watchdog机制是什么…...
Android Studio 配置 Gerrit Code Review
很多大厂(华为、荣耀)的大型项目都有gerrit代码审查流程,那么我们如何实现不手动敲命令行,就在Android Studio中像平常开发一样,只需要用鼠标点点点,就能将代码推送到gerrit审查仓呢,现在就来跟…...
基于微信小程序的医院预约挂号系统的设计与实现
hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…...
仅128个token达到ImageNet生成SOTA性能!MAETok:有效的扩散模型的关键是什么?(卡内基梅隆港大等)
论文链接:https://arxiv.org/pdf/2502.03444 项目链接:https://github.com/Hhhhhhao/continuous_tokenizer 亮点直击 理论与实验分析:通过实验和理论分析建立了潜空间结构与扩散模型性能之间的联系。揭示了具有更少高斯混合模型(G…...
AWS成本优化实战:查询未关联弹性IP地址的完整指南
一、背景介绍 1.1 为什么要管理未关联的弹性IP 弹性IP (Elastic IP) 是AWS中的重要资源,但未关联的弹性IP会产生不必要的成本支出。主要问题包括: 闲置资源浪费持续产生费用增加运维成本影响资源管理效率1.2 解决方案价值 通过自动化脚本定期检查未关联的弹性IP: 及时发现…...
I2C协议—读写EEPROM(24Cxx为例)
STM32 I2C协议详解与应用实践-CSDN博客 实际项目中移植IIC协议及读写EEprom代码: /* AT24C08,写次数达100万次SOC ,2500次充放电次数,需要500万次记录,需存储均衡 每页*/#include "FreeRTOS.h" #include "task.h" #incl…...
示例:JAVA调用deepseek
近日,国产AI DeepSeek在中国、美国的科技圈受到广泛关注,甚至被认为是大模型行业的最大“黑马”。在外网,DeepSeek被不少人称为“神秘的东方力量”。1月27日,DeepSeek应用登顶苹果美国地区应用商店免费APP下载排行榜,在…...
Linux系统命令无法使用(glib库相关问题)
1.背景描述 Yum强制安装了一些软件,安装软件成功无报错,完成后不久突然发现系统出问题了,所有的命令无法使用了,如ls、mv、cat等基本命令报错。 relocation error: /lib64/libpthread.so.0: symbol_libc_dl_error_tsd …...
Java 一键将 Word 文档转为 PDF
嘿,朋友们!在开发中,经常会碰到需要把 Word 文档转换成 PDF 格式的需求,像生成报告、合同啥的。Java 有不少好用的库能实现这个功能,下面就给大家介绍两种常见的方法,分别使用 Apache POI 和 Docx4J 结合 i…...
从基础到进阶:一文掌握排序、查找、动态规划与图算法的全面实现(C++代码实例解析)
引言 算法是计算机科学的核心,也是程序员解决复杂问题的利器。从基础的排序与查找到进阶的动态规划与图论算法,掌握这些技能不仅是提升编程能力的必经之路,更是解决实际问题的根本。本篇文章将通过 C 实现多个经典算法,包括排序、…...
Nginx反代Ollama接口跨域、无法逐字输出问题
场景 本地部署deepseek模型,用的Ollama管理,内网穿透到公网,在通过nginx反代ollama接口。 问题描述 跨域问题 nginx转发时请求头中需要加入origin,并且origin还要和ollama接口同源(协议、ip、端口一致)。…...
电脑黑屏按什么键恢复?电脑黑屏的解决办法
电脑黑屏的原因有很多,可能是硬件、软件、系统或者病毒等方面造成的。那么,当我们遇到电脑黑屏时,应该怎么做呢?有没有什么快捷的方法可以恢复正常呢?本文将为您介绍一些常见的电脑黑屏情况及其解决办法。 一、电脑开机…...
docker启动报错code=exited, status=1/FAILURE——问题排查
问题 在某台centos7机器上,启动docker服务 sudo systemctl start docker报下列错误: ● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)Active: …...
Kong故障转移参数配置
一、Passive Health Check Healthchecks.Passive.Unhealthy.HttpStatuses 含义: 列出了被认为是“不健康”的HTTP状态码。目的: 当健康检查(Healthcheck)返回这些状态码时,系统会认为服务不健康,并可能触…...
