Как запустить задание crontab для образа эластичного поиска - PullRequest
0 голосов
/ 13 марта 2019

Я хочу запустить задание crontab для образа окна эластичного поиска, и вот мой файл докера

FROM docker.elastic.co/elasticsearch/elasticsearch:6.6.0

ENV PATH=$PATH:/usr/share/elasticsearch/bin

RUN yum -y update

RUN yum -y install crontabs

RUN echo -e "root\nelasticsearch" > /etc/cron.allow

RUN echo "" >> /etc/cron.allow

RUN chmod -R 644 /etc/cron.d

RUN cat /etc/cron.allow

RUN chown -R elasticsearch /etc/cron.d

RUN chmod -R 755 /etc/cron.d

RUN chown -R elasticsearch /var/spool/cron

RUN chmod -R 744 /var/spool/cron

RUN chown -R elasticsearch /etc/crontab

RUN chmod -R 744 /etc/crontab

RUN chown -R elasticsearch /etc/cron.d

RUN chmod -R 744 /etc/cron.d

COPY ./purge.sh /usr/share/elasticsearch

RUN ls -l /etc/crontab

RUN ls -l /etc/cron.d

RUN touch /usr/share/elasticsearch/cron.log

ADD ./cron /etc/cron.d/cron_test

RUN chmod 0644 /etc/cron.d/cron_test

RUN cd /etc/cron.d && cat cron_test

RUN chown -R elasticsearch /etc/cron.d/cron_test

RUN ls -l /etc/cron.d/cron_test

RUN crontab /etc/cron.d/cron_test

RUN crontab -l

RUN cd /var/spool/cron && ls

USER elasticsearch

ENTRYPOINT elasticsearch

CMD crond start && pgrep cron && tail -f && tail -f /usr/share/elasticsearch/cron.log

EXPOSE 9200 9300

после запуска этого файла Docker и выполнения контейнера , я получаю это

введите описание изображения здесь

На этом шаге в файле Docker RUN cd / var / spool / cron && ls

он показывает только root, но как я могу получить в нем пользователяasticsearch? **

мой файл cron присутствует локально

*/1 * * * * echo "Hello world" >> /usr/share/elasticsearch/cron.log
*/1 * * * * elasticsearch /usr/share/elasticsearch/purge.sh

мой файл purge.sh

curl -XPOST "http://localhost:9200/hydro_dashboard_index/_delete_by_query" -H 'Content-Type: application/json' -d'
{
"query": {
"range" : {
"query_service_entry_time" : {
"lt" : "now-14d"
}
}
}
}'

1 Ответ

0 голосов
/ 14 марта 2019

Обычно считается, что лучше выполнять только один процесс в контейнере. Так как в cron вы пытаетесь просто выполнить HTTP-запрос кasticsearch, в нем нет ничего, что нужно запускать в том же контейнере или даже в Docker.

Если на вашем хосте установлен стандартный дистрибутив Linux со стандартным демоном cron, самое простое, что нужно сделать - просто спрятать этот скрипт purge где-нибудь на вашем хосте и запустить его через службу cron хоста. Если вы знаете, что cron иasticsearch находятся на одном хосте, и вы запускаете контейнер с опцией -p 9200:9200 для публикации стандартного HTTP-порта эластичного поиска, сценарий должен работать без изменений.

Если абсолютно все должно работать в Docker, вы можете искать в Docker Hub предварительно созданный образ cron (есть пара, хотя ни один из них не выглядит особенно активно поддерживаемым). Вы также можете использовать минимальный набор инструментов в busybox image ; его документация может быть немного легким. Тем не менее, базовый подход, который вам нужно использовать, выглядит следующим образом:

  • Найдите или создайте образ Docker, который содержит только cron и curl - без Elasticsearch, без реальных crontabs, только сами программы.
  • Если вы вручную docker run ning контейнеры, docker network create some_network (с любым именем и параметрами по умолчанию) и запустите контейнеры Elasticsearch и cron с --net some_network.
  • В командах curl используйте docker run --name контейнера Elasticsearch или имя его блока Docker Compose services: в качестве имени хоста; localhost всегда будет означать «этот контейнер».
  • Поместите файлы crontabs и вспомогательные сценарии в какой-то каталог на вашем хосте и вставьте их в контейнер cron с параметром docker run -v (то есть рассматривайте их как конфигурацию).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...