如何通过Docker Compose部署带有预准备数据的OpenSearch?
直接用Docker Compose部署带预准备数据的OpenSearch
可以实现,官方未提及是因为这属于自定义部署场景,下面给两种适配你现有配置的可靠实现方式:
方法1:挂载预填充的数据目录(最直接)
如果已经有导出的OpenSearch完整数据目录,直接替换默认空卷即可:
- 先获取并处理预准备数据目录:
从已运行的OpenSearch容器复制数据:
确保目录权限匹配OpenSearch容器的运行用户(docker cp opensearch-node1:/usr/share/opensearch-data ./opensearch-prepared-data1000:1000):chown -R 1000:1000 ./opensearch-prepared-data - 修改你的
docker-compose.yml,将命名卷替换为本地预数据目录的绑定挂载:
启动后,OpenSearch会直接加载预存数据,无需额外导入操作。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"]'
方法2:添加初始化脚本自动导入数据(适合动态数据文件)
如果只有批量导入的JSON数据文件,可新增一个初始化服务,等OpenSearch启动就绪后自动执行导入:
- 准备符合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"} - 修改
docker-compose.yml,新增初始化服务:
启动后,初始化服务会在OpenSearch就绪后自动导入数据,完成后容器自动停止。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:
注意事项
- 方法1中,预数据目录必须与OpenSearch版本兼容,避免版本不匹配导致数据损坏。
- 方法2中,默认OpenSearch启用了HTTPS和账号认证,curl命令需带上
--insecure和--user admin:admin(若修改了默认密码,需对应调整)。
内容的提问来源于stack exchange,提问作者Руслан Кузнецов
相关产品推荐
相关产品推荐

