使用Docker运行Elasticsearch

时间:2019-03-14 06:28:01

标签: docker elasticsearch

我在基于ubuntu:16.04的映像中安装了Elasticsearch。

并使用

启动服务
RUN service elasticsearch start

但是,它没有开始。

如果我进入容器并运行它,它将启动。

我想在创建映像时运行服务并转储索引,以下是我的Dockerfile的一部分。

如何在Dockerfile中启动Elasticsearch?

#install OpenJDK-8
RUN apt-get update && apt-get install -y openjdk-8-jdk && apt-get install -y ant && apt-get clean

RUN apt-get update && apt-get install -y ca-certificates-java && apt-get clean
RUN update-ca-certificates -f

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
RUN export JAVA_HOME

#download ES
RUN wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
RUN apt-get install -y apt-transport-https
RUN echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list
RUN apt-get update && apt-get install -y elasticsearch

RUN service elasticsearch start

2 个答案:

答案 0 :(得分:2)

RUN命令仅在构建阶段执行。构建完成后它将停止。您应该改用CMD(或ENTRYPOINT):

CMD service elasticsearch start && /bin/bash

最好将启动命令包装在您自己的文件中,然后仅执行该文件:

CMD /start_elastic.sh

答案 1 :(得分:1)

我不知道为什么不使用正式的oss图像,而是基于Debian工作的this Docker file

FROM java:8-jre

ENV ES_NAME=elasticsearch \
        ELASTICSEARCH_VERSION=6.6.1
ENV ELASTICSEARCH_URL=https://artifacts.elastic.co/downloads/$ES_NAME/$ES_NAME-$ELASTICSEARCH_VERSION.tar.gz

RUN apt-get update && apt-get install -y --assume-yes openssl bash curl wget \
    && mkdir -p /opt \
    && echo '[i] Start create elasticsearch' \
    && wget -T 15 -O /tmp/$ES_NAME-$ELASTICSEARCH_VERSION.tar.gz $ELASTICSEARCH_URL \
    && tar -xzf /tmp/$ES_NAME-$ELASTICSEARCH_VERSION.tar.gz -C /opt/ \
    && ln -s /opt/$ES_NAME-$ELASTICSEARCH_VERSION /opt/$ES_NAME \
    && useradd elastic \
    && mkdir -p /var/lib/elasticsearch /opt/$ES_NAME/plugins /opt/$ES_NAME/config/scripts \
    && chown -R elastic /opt/$ES_NAME-$ELASTICSEARCH_VERSION/


ENV PATH=/opt/elasticsearch/bin:$PATH

USER elastic

CMD [ "/bin/sh", "-c", "/opt/elasticsearch/bin/elasticsearch --E cluster.name=test --E network.host=0 $ELASTIC_CMD_OPTIONS" ]

我相信您可以在Ubuntu上使用的大多数命令。

不要忘记在主机上运行sudo sysctl -w vm.max_map_count=262144