如何通过Docker Compose在OpenSearch Dashboards启动时预配置索引模式?
回答
1. 能否挂载导出的索引模式到容器中?
可以,但要结合OpenSearch Dashboards的存储逻辑来操作:
- OpenSearch Dashboards默认将所有保存对象(包括索引模式)存在OpenSearch集群的
.opensearch_dashboards索引里,不是本地文件系统。 - 两种可行的挂载方案:
- 预初始化OpenSearch索引:提前把索引模式的JSON数据写入
.opensearch_dashboards索引,Dashboards启动后会自动加载。可以把初始化逻辑做成脚本,挂载到容器中作为启动前置任务。 - 配置自动导入目录:在2.7版本中,可修改
opensearch_dashboards.yml,添加opensearchDashboards.savedObjects.importPath参数指定导入目录,然后把导出的.ndjson文件挂载到该目录,Dashboards启动时会自动导入。
- 预初始化OpenSearch索引:提前把索引模式的JSON数据写入
2. 是否存在API触发导入操作?
存在,就是你用的/api/saved_objects/_import接口,但你遇到的“返回成功却无实际对象”问题,大概率是以下原因:
- 目标索引未存在:你要创建的索引模式(比如
ecs*)对应的实际索引在OpenSearch集群里还没创建,Dashboards验证不通过,所以不会在UI显示。先确保目标索引已创建或有数据写入。 - NDJSON格式问题:导出的文件可能缺少必要字段(比如
attributes.fields、attributes.title),或者格式损坏。可以重新通过UI导出一次再试。 - 请求头或权限问题:尝试添加
Content-Type: multipart/form-data头,或者改用兼容的kbn-xsrf头替代osd-xsrf。
修正后的curl命令示例:
curl -X POST \ -H "osd-xsrf: true" \ -H "Content-Type: multipart/form-data" \ "http://admin:admin@localhost:8094/api/saved_objects/_import?overwrite=true" \ --form file=@data/export.ndjson
如果想在Docker Compose启动时自动执行导入,可给Dashboards服务添加启动脚本:
services: opensearch: image: opensearchproject/opensearch environment: - discovery.type=single-node - plugins.security.disabled=true # 测试环境可临时关闭安全简化配置 opensearch-dashboards: image: opensearchproject/opensearch-dashboards ports: - "8094:5601" environment: - OPENSEARCH_HOSTS=http://opensearch:9200 volumes: - ./import-script.sh:/usr/share/opensearch-dashboards/import-script.sh - ./data/export.ndjson:/usr/share/opensearch-dashboards/data/export.ndjson command: ["/bin/bash", "-c", "opensearch-dashboards & sleep 30 && ./import-script.sh && wait"]
import-script.sh内容:
#!/bin/bash curl -X POST \ -H "osd-xsrf: true" \ "http://admin:admin@localhost:5601/api/saved_objects/_import?overwrite=true" \ --form file=@data/export.ndjson
内容的提问来源于stack exchange,提问作者terrywb
相关产品推荐
相关产品推荐

