官方Elasticsearch Docker Compose示例无法运行问题求助
问题分析与解决步骤
1. 容器进程被Killed的核心原因:内存不足
日志中的Killed提示是系统OOM(内存不足)杀手终止了elasticsearch-keystore create进程。Elasticsearch对内存资源要求较高,官方默认配置可能超出当前主机的可用内存上限,导致进程被强制终止。
解决方法:
- 调整Docker Compose中ES服务的JVM内存参数:在
es01服务的environment字段中添加或修改以下配置:
根据主机实际可用内存调整数值,例如主机总内存为2GB时,设置为512MB或1GB较为合适。- ES_JAVA_OPTS=-Xms512m -Xmx512m - 用
free -h命令检查主机可用内存,确保有足够资源分配给ES容器。
2. 手动创建keystore导致bootstrap.password冲突的解决
当你手动创建elasticsearch.keystore并挂载到容器后,官方启动脚本会尝试自动设置bootstrap.password,但该密钥已存在于你手动创建的keystore中,引发冲突导致容器崩溃。
解决方法:
- 方案一:让容器自动管理keystore
删除本地手动创建的elasticsearch.keystore文件,确保挂载的config目录下无该文件,让容器启动脚本自动创建并配置keystore。配合上述内存调整后,重新启动容器。 - 方案二:手动配置
bootstrap.password
若需手动管理keystore,执行以下步骤:- 在本地创建keystore后,手动添加
bootstrap.password:
输入自定义密码后,将keystore文件挂载到容器的elasticsearch-keystore add bootstrap.password/usr/share/elasticsearch/config/目录。 - 在Docker Compose的
es01服务中添加环境变量,禁用自动初始化密码:
注意此处密码需与手动添加到keystore的密码完全一致。- ELASTIC_PASSWORD=你的自定义密码 - DISABLE_SECURITY_INITIALIZATION=true
- 在本地创建keystore后,手动添加
3. 其他排查方向
- 检查Docker资源配额:确保Docker守护进程有足够的内存分配,Docker Desktop用户可在
Settings->Resources中调整资源上限;Linux用户可通过修改Docker daemon配置文件调整。 - 修正挂载目录权限:ES容器默认使用UID为1000的用户运行,需确保挂载的config目录及文件权限匹配,执行以下命令调整:
chown -R 1000:1000 ./elasticsearch/config
内容的提问来源于stack exchange,提问作者Gennadii Belousov
相关产品推荐
相关产品推荐

