使用Python Docker SDK启动单节点Elasticsearch的配置与报错解决
配置注入实现方法
要解决当前的容器启动失败问题,只需在Docker SDK的容器启动方法中,通过environment参数给容器传入ES官方镜像内置脚本可识别的配置项即可,无需额外挂载自定义配置文件。
官方ES镜像的启动逻辑会自动识别所有以ES_为前缀的环境变量,将其转换为elasticsearch.yml的对应配置写入配置文件。
核心配置说明
- 必选配置:设置单节点运行模式,对应环境变量为
ES_DISCOVERY_TYPE=single-node。传入该参数后,ES会自动跳过多节点集群发现的生产校验,不会触发默认配置不适合生产使用的报错。 - 可选优化配置:设置固定的JVM堆内存大小,对应环境变量为
ES_JAVA_OPTS=-Xms512m -Xmx512m。该配置可避免ES自动匹配宿主机内存分配过大堆空间,导致本地测试时出现OOM启动失败的问题。
修改后的可运行代码
import docker client = docker.from_env() port = {'9200/tcp':'9200','9300/tcp':'9300'} container = client.containers.run( "docker.elastic.co/elasticsearch/elasticsearch:7.10.1", ports=port, environment=[ "ES_DISCOVERY_TYPE=single-node", "ES_JAVA_OPTS=-Xms512m -Xmx512m" ] )
补充提示
如果需要保留ES的完整生产级校验逻辑,仅跳过集群发现环节的配置校验,也可以通过传入ES_CLUSTER_INITIAL_MASTER_NODES=[node-1]、ES_DISCOVERY_SEED_HOSTS=[]的方式实现,但单节点本地测试场景下,直接设置单节点发现模式是最简便的方案。
内容的提问来源于stack exchange,提问作者hodael cohen
相关产品推荐
相关产品推荐

