We are trying to run the Elasticsearch node in a Docker container. We use the Search Guard plugin for security. However, during the installation process, the plugin requires us to run the script. This script required ElasticSearch to be available on server 9300 when it was launched. Is there a best practice for deferred scenarios? We tried to sleep before execution, and the RUN and CMD Dockerfile commands.
Here is the result:
elasticsearch | Search Guard Admin v5
elasticsearch | Will connect to localhost:9300
elasticsearch | ERR: Seems there is no elasticsearch running on
localhost:9300 - Will exit
Dockerfile:
FROM docker.elastic.co/elasticsearch/elasticsearch:5.3.0
USER root
RUN apk update \
&& apk upgrade \
&& apk add nano
USER root
ADD elasticsearch.yml /usr/share/elasticsearch/config/
RUN chown elasticsearch:elasticsearch /usr/share/elasticsearch/config/elasticsearch.yml
ADD keys/truststore.jks /usr/share/elasticsearch/config/
RUN chown elasticsearch:elasticsearch /usr/share/elasticsearch/config/truststore.jks
ADD gen-cert/ /usr/share/elasticsearch/gen-cert/
WORKDIR /usr/share/elasticsearch/gen-cert
RUN ./gen_node_cert.sh 0
RUN cp node-keystore.jks /usr/share/elasticsearch/config/
WORKDIR /usr/share/elasticsearch/
USER elasticsearch
RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:5.3.0-11
RUN chmod +x -R /usr/share/elasticsearch/plugins/search-guard-5/tools/
CMD sleep 10 && /usr/share/elasticsearch/plugins/search-guard-5/tools/sgadmin.sh \
-cd /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/ \
-cn SHU \
-ks /usr/share/elasticsearch/config/node-keystore.jks \
-kspass Chupacabra \
-ts /usr/share/elasticsearch/config/truststore.jks \
-tspass Chupacabra \
-nhnv
source
share