ElasticSearch通过Docker Compose配置action.auto_create_index的有效性及方法
Elasticsearch docker-compose 中 action.auto_create_index 配置问题解答
问题背景
你在docker-compose.yml中的Elasticsearch节点配置如下:
elasticsearch-node1: profiles: ["local"] image: "docker.elastic.co/elasticsearch/elasticsearch:7.10.2" container_name: elasticsearch-node1 ulimits: memlock: soft: -1 hard: -1 environment: - cluster.name=mycluster - node.name=node1 - action.auto_create_index=true - discovery.seed_hosts=elasticsearch-node2,elasticsearch-node3 # Add node3 - cluster.initial_master_nodes=node1,node2,node3 # Add node3 ports: - "9201:9200"
针对你提出的两个问题,解答如下:
1. 该配置是否有效?
无效。
Elasticsearch在Docker容器中通过环境变量加载配置时,必须遵循特定的命名转换规则:配置项中的点(.)需要替换为下划线(_),同时所有字母转为大写。你当前写的action.auto_create_index=true不符合该规则,容器无法正确识别并应用这个配置。
另外补充:Elasticsearch 7.10.2版本中,action.auto_create_index的默认值就是true——也就是说如果没有修改过集群的默认配置,索引自动创建功能本来就是开启的。但如果之前有修改过该参数,或者需要明确指定配置,就必须用正确的方式设置。
2. 若无效,如何通过docker-compose.yml设置该参数?
有两种可靠的方式:
方式一:修正环境变量格式
按照Elasticsearch的环境变量规则,把配置项转换为大写+下划线的形式:
elasticsearch-node1: profiles: ["local"] image: "docker.elastic.co/elasticsearch/elasticsearch:7.10.2" container_name: elasticsearch-node1 ulimits: memlock: soft: -1 hard: -1 environment: - cluster.name=mycluster - node.name=node1 - ACTION_AUTO_CREATE_INDEX=true # 修正后的环境变量格式 - discovery.seed_hosts=elasticsearch-node2,elasticsearch-node3 - cluster.initial_master_nodes=node1,node2,node3 ports: - "9201:9200"
方式二:挂载自定义配置文件(适合复杂配置场景)
如果需要设置多个Elasticsearch配置项,挂载自定义配置文件会更灵活:
- 在docker-compose.yml同级目录创建
elasticsearch.yml文件,添加内容:
action.auto_create_index: true
- 修改docker-compose.yml,添加
volumes字段挂载该文件:
elasticsearch-node1: profiles: ["local"] image: "docker.elastic.co/elasticsearch/elasticsearch:7.10.2" container_name: elasticsearch-node1 ulimits: memlock: soft: -1 hard: -1 environment: - cluster.name=mycluster - node.name=node1 - discovery.seed_hosts=elasticsearch-node2,elasticsearch-node3 - cluster.initial_master_nodes=node1,node2,node3 volumes: - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 挂载自定义配置 ports: - "9201:9200"
无论用哪种方式,设置完成后重启容器,Elasticsearch就会开启自动创建不存在的索引的功能。
内容的提问来源于stack exchange,提问作者Alexander Mills
相关产品推荐
相关产品推荐

