2016-08-17 143 views
12

我將使用官方Elasticsearch映像。我想要做的是在Docker運行期間設置索引的映射。在Docker運行期間在Elasticsearch中設置映射

所以我需要在容器啓動後立即執行。

捲曲-XPUT本地主機:9200/_template/HTTP_REQUEST -d {} .....

所以我不能做到這一點在Dockerfile或可以嗎?

謝謝

回答

5

我終於實現了這個

泊塢窗,composer.yml

version: '2' 
services: 
    elasticsearch: 
    image: elasticsearch:2.3 
    command: elasticsearch -Des.network.host=0.0.0.0 
    ports: 
     - "9200:9200" 
     - "9300:9300" 
    elasticsearch-mapping-init: 
    build: elasticsearch-mapping-init 
    links: 
     - elasticsearch 
    depends_on: 
     - elasticsearch 

,這裏是我的elasticsearch映射-INIT/Dockerfile:

FROM ubuntu 

# Install packages 
RUN apt-get update && \ 
apt-get install -y curl 

COPY docker-entrypoint.sh/

ENTRYPOINT ["/docker-entrypoint.sh"] 

這裏是我的elasticsearch-mapping-init/docker-entrypoint.sh

#!/bin/bash 

for i in {30..0}; do 
    if curl elasticsearch:9200; then 
     curl -XPUT elasticsearch:9200/_template/log -d ' 
      { 
       "template" : "log-*", 
       "settings": { 
        "number_of_shards": 1 
       }, 
       "mappings" : { 


       } 
      }'; 
      break; 
    fi 
    sleep 2 
done 

我相信這並不完美,我仍然在尋找更好的解決方案。

+2

您可以在單個官方elasticsearch圖片中執行所有操作。您可以使用FROM elasticsearch將其添加到您自己的dockerfile中的docker-entrypoint.sh中。這是他們現在爲最新的ES所做的:https://github.com/docker-library/elasticsearch/blob/ffaaf3283e47dcb732e90288a58757b87a8439a7/5/docker-entrypoint.sh –

+0

@BretFisher你能給我更多的信息嗎?我仍然不知道在官方ES鏡像中如何去做。 –

+0

它可能不是完美的答案,因爲'depend_on'不會等待elasticsearch服務做好準備。它將等待elasticsearch開始。因此init-service可以在elasticsearch正在啓動時啓動,但尚未完全運行。 –

相關問題