Почему я отскочил от контейнера Docker? - PullRequest
0 голосов
/ 29 апреля 2018
FROM docker.elastic.co/elasticsearch/elasticsearch:5.5.2
USER root
WORKDIR /usr/share/elasticsearch/

ENV ES_HOSTNAME elasticsearch
ENV ES_PORT 9200

RUN chown elasticsearch:elasticsearch config/elasticsearch.yml
RUN chown -R elasticsearch:elasticsearch data
# install security plugin

RUN bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:5.5.2-16
COPY ./safe-guard/install_demo_configuration.sh plugins/search-guard-5/tools/

COPY ./safe-guard/init-sgadmin.sh plugins/search-guard-5/tools/
RUN chmod +x plugins/search-guard-5/tools/init-sgadmin.sh

ADD ./run.sh .
RUN chmod +x run.sh


RUN chmod +x plugins/search-guard-5/tools/install_demo_configuration.sh

RUN ./plugins/search-guard-5/tools/install_demo_configuration.sh -y

RUN chmod +x sgadmin_demo.sh

RUN  yum install tree -y

#RUN curl -k -u admin:admin https://localhost:9200/_searchguard/authinfo

RUN usermod -aG wheel elasticsearch


USER elasticsearch

EXPOSE 9200

#ENTRYPOINT ["nohup",  "./run.sh", "&"]

ENTRYPOINT ["/usr/share/elasticsearch/run.sh"]

#CMD ["echo", "hello"]

После добавления CMD или Entrypoint - «Контейнер завершен с кодом 0»

#!/bin/bash

exec $@

Если я прокомментирую ENTRYPOINT или CMD - все отлично.

Что я делаю не так ???

1 Ответ

0 голосов
/ 29 апреля 2018

Если вы посмотрите на официальный 5.6.9asticsearch Dockerfile , внизу вы увидите следующее:

ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["elasticsearch"]

Если вы не знаете разницу между CMD и ENTRYPOINT, прочитайте этот ответ .

То, что вы делаете, вы переписываете эти две инструкции чем-то другим. Что вам действительно нужно, это продлить CMD. Что я обычно делаю в своих изображениях, я создаю сценарий sh и комбинирую разные вещи, которые мне нужны, а затем указываю сценарий для CMD. Итак, вам нужно запустить sgadmin_demo.sh, но вам нужно сначала дождаться упругого поиска. Создайте скрипт start.sh:

#!/bin/bash
elasticsearch
sleep 15
sgadmin_demo.sh

Теперь добавьте ваш скрипт к вашему изображению и запустите его на CMD:

FROM: ...
...
COPY start.sh /tmp/start.sh
CMD ["/tmp/start.sh"]

Теперь это должно выполняться после запуска контейнера. Не забудьте построить:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...