You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Docker Compose部署带有预准备数据的OpenSearch?

直接用Docker Compose部署带预准备数据的OpenSearch

可以实现,官方未提及是因为这属于自定义部署场景,下面给两种适配你现有配置的可靠实现方式:

方法1:挂载预填充的数据目录(最直接)

如果已经有导出的OpenSearch完整数据目录,直接替换默认空卷即可:

  1. 先获取并处理预准备数据目录:
    从已运行的OpenSearch容器复制数据:
    docker cp opensearch-node1:/usr/share/opensearch-data ./opensearch-prepared-data
    
    确保目录权限匹配OpenSearch容器的运行用户(1000:1000):
    chown -R 1000:1000 ./opensearch-prepared-data
    
  2. 修改你的docker-compose.yml,将命名卷替换为本地预数据目录的绑定挂载:
    version: '3'
    services:
      opensearch-node1:
        image: opensearchproject/opensearch:latest
        container_name: opensearch-node1
        environment:
          - cluster.name=opensearch-cluster
          - node.name=opensearch-node1
          - discovery.type=single-node
          - bootstrap.memory_lock=true
          - "OPENSEARCH_JAVA_OPTS=-Xms1024m -Xmx1024m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
          nofile:
            soft: 65536
            hard: 65536
        volumes:
          # 替换为本地预准备的数据目录路径
          - ./opensearch-prepared-data:/usr/share/opensearch/data
        ports:
          - 9200:9200
          - 9600:9600
      opensearch-dashboards:
        image: opensearchproject/opensearch-dashboards:latest
        container_name: opensearch-dashboards
        ports:
          - 5601:5601
        expose:
          - "5601"
        environment:
          OPENSEARCH_HOSTS: '["https://opensearch-node1:9200"]'
    
    启动后,OpenSearch会直接加载预存数据,无需额外导入操作。

方法2:添加初始化脚本自动导入数据(适合动态数据文件)

如果只有批量导入的JSON数据文件,可新增一个初始化服务,等OpenSearch启动就绪后自动执行导入:

  1. 准备符合OpenSearch批量API格式的数据文件(比如./init-data/bulk-data.json):
    {"index": {"_index": "my-index", "_id": "1"}}
    {"title": "Test Document 1", "content": "This is pre-prepared data"}
    {"index": {"_index": "my-index", "_id": "2"}}
    {"title": "Test Document 2", "content": "More pre-prepared data"}
    
  2. 修改docker-compose.yml,新增初始化服务:
    version: '3'
    services:
      opensearch-node1:
        image: opensearchproject/opensearch:latest
        container_name: opensearch-node1
        environment:
          - cluster.name=opensearch-cluster
          - node.name=opensearch-node1
          - discovery.type=single-node
          - bootstrap.memory_lock=true
          - "OPENSEARCH_JAVA_OPTS=-Xms1024m -Xmx1024m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
          nofile:
            soft: 65536
            hard: 65536
        volumes:
          - opensearch-data1:/usr/share/opensearch/data
        ports:
          - 9200:9200
          - 9600:9600
        healthcheck:
          # 健康检查确保OpenSearch就绪
          test: ["CMD-SHELL", "curl -s --insecure https://localhost:9200/_cluster/health | grep -q '\"status\":\"green\"'"]
          interval: 10s
          timeout: 10s
          retries: 5
      opensearch-dashboards:
        image: opensearchproject/opensearch-dashboards:latest
        container_name: opensearch-dashboards
        ports:
          - 5601:5601
        expose:
          - "5601"
        environment:
          OPENSEARCH_HOSTS: '["https://opensearch-node1:9200"]'
        depends_on:
          opensearch-node1:
            condition: service_healthy
      # 新增初始化数据服务
      opensearch-init:
        image: curlimages/curl:latest
        container_name: opensearch-init
        volumes:
          - ./init-data:/init-data
        depends_on:
          opensearch-node1:
            condition: service_healthy
        command: >
          sh -c "curl -s --insecure --user admin:admin -X POST https://opensearch-node1:9200/_bulk -H 'Content-Type: application/json' --data-binary @/init-data/bulk-data.json"
        # 执行完成后自动退出
        restart: "no"
    volumes:
      opensearch-data1:
    
    启动后,初始化服务会在OpenSearch就绪后自动导入数据,完成后容器自动停止。

注意事项

  • 方法1中,预数据目录必须与OpenSearch版本兼容,避免版本不匹配导致数据损坏。
  • 方法2中,默认OpenSearch启用了HTTPS和账号认证,curl命令需带上--insecure和--user admin:admin(若修改了默认密码,需对应调整)。

内容的提问来源于stack exchange,提问作者Руслан Кузнецов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:31:06