azerphoenix
@azerphoenix
Java Software Engineer

Как запускать docker контейнер по CRONу?

Добрый день.
Есть java приложение (парсер), которое будет запускаться внутри контейнера. Создал Dockerfile, а также docker-compose.yml
Все корректно работает, но после завершения работы парсера, контейнер останавливается.
Является ли корректным решением запускать контейнер при помощи CRON? Если да, то как-то сделать?
Пробовал запускать jar файл по крону ВНУТРИ контейнера, но как я понял по завершению работы jar файла контейнер останавливается и соответственно, дальше крон не срабатывает.
Заранее благодарен.

Dockerfile
FROM adoptopenjdk/openjdk11:x86_64-ubuntu-jdk-11.0.12_7 as build

COPY . /srv
RUN cd /srv && ./mvnw clean package
WORKDIR /srv

ARG API_VERSION=1.0

FROM adoptopenjdk/openjdk11:x86_64-ubuntu-jdk-11.0.12_7
RUN mkdir -p /srv/uploads/

#CRON
#ADD docker-cron /etc/cron.d/docker-cron
#RUN chmod 0644 /etc/cron.d/docker-cron
#RUN touch /var/log/cron.log
#RUN apt-get update && apt-get install cron
#CMD cron && tail -f /var/log/cron.log

ENV API_VERSION=1.0
COPY --from=build /srv/target/parser-${API_VERSION}.jar /srv/parser-${API_VERSION}.jar
ENTRYPOINT exec java -jar /srv/parser-${API_VERSION}.jar


docker-cron
0 0 0/2 1/1 * ? * java -jar /srv/parser-${API_VERSION}.jar >> /var/log/cron.log 2>&1
# An empty line is required at the end of this file for a valid cron file.


docker-compose
version: '3.8'

services:
  parser:
    build:
      context: ./
      dockerfile: Dockerfile
    container_name: parser
    restart: always
  • Вопрос задан
  • 418 просмотров
Решения вопроса 2
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Надо на host-машине завести cron с запуском контейнера и передачи в него команды с последующей остановкой
Ответ написан
нативно https://www.baeldung.com/spring-scheduled-tasks
еще можно стандартный рест сервер в контейнер а в крон вызов его же
entrypoint - баш скрипт просто с sleep loop - так часто делают когда внутри томкат и приложение собрано как вар и не хотят дать докеру узнать что каталина останавливалась
можно конечно и крон или систем д или инит д поставить но для альпин и убунту будет не одинаково
все перечисленное кажется лучше чем городить крон снаружи с остановкой и пересозданием конейнера
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы