Сконфигурируйте Dockerfile для запуска задач Cron, используя Whenver и Rake - PullRequest
0 голосов
/ 06 декабря 2018

Я хочу создать контейнер с помощью Docker, который будет отвечать за запуск повторяющихся задач по рейку на основе конфигурации гема Everyever.У меня есть простой проект ruby ​​(без rails / sinatra) со следующей структурой:

Gemfile :

source 'https://rubygems.org'
gem 'rake', '~> 12.3', '>= 12.3.1'
gem 'whenever', '~> 0.9.7', require: false
group :development, :test do
  gem 'byebug', '~> 10.0', '>= 10.0.2'
end
group :test do
  gem 'rspec', '~> 3.5'
end

config / schedule.rb : (при любой конфигурации)

ENV.each { |k, v| env(k, v) }
every 1.minutes do
  rake 'hello:start'
end

lib / tasks / hello.rb : (конфигурация rake)

namespace :hello do
  desc 'This is a sample'
    task :start do
    puts 'start something!'
  end
end

Dockerfile :

FROM ruby:2.5.3-alpine3.8

RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories && \
    apk update && apk upgrade && \
    apk add build-base bash dcron && \
    apk upgrade --available && \
    rm -rf /var/cache/apk/* && \
    mkdir /usr/app

WORKDIR /usr/app

COPY Gemfile* /usr/app/

RUN bundle install

COPY . /usr/app

RUN bundle exec whenever --update-crontab

CMD ['sh', '-c', 'crond && gulp']

Я использовал следующие ресурсы, чтобы получить к этому моменту

Если я вызываю задачу rake с помощью командной строки, я получаюрезультат хочу.

$ rake 'hello:start'
start something!

Однако я не могу понять, как заставить его работать с помощью Docker.Контейнер строится, но журнал не записывается, выходные данные не отображаются, ничего не происходит.Может кто-нибудь помочь мне показать, что я делаю не так?

команды построения

docker build -t gsc:0.0.1 .
docker container run -a stdin -a stdout -i --net host -t gsc:0.0.1 /bin/bash

Спасибо всем.Приветствия

1 Ответ

0 голосов
/ 07 февраля 2019

Это решение проблемы, которую я перечислил выше.У меня были некоторые проблемы на Dockerfile и schedule.rb.Это то, что мне пришлось изменить, чтобы заставить его работать правильно.

Dockerfile

  • неправильный эхо-вызов
  • неправильная команда связывания
  • изменить ENTRYPOINT вместо CMD
FROM ruby:2.5.3-alpine3.8

RUN apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/main && \
    apk update && apk upgrade && \
    apk add build-base bash dcron && \
    apk upgrade --available && \
    rm -rf /var/cache/apk/* && \
    mkdir /usr/app

WORKDIR /usr/app

COPY Gemfile* /usr/app/

RUN bundle install

COPY . /usr/app

RUN bundle exec whenever -c && bundle exec whenever --update-crontab && touch ./log/cron.log

ENTRYPOINT crond && tail -f ./log/cron.log

config / schedule.rb

  • без необходимости ENV.each
every 1.minutes do
  rake 'hello:start'
end

ОБНОВЛЕНИЕ

Я создал GitHub репозиторий и Docker Hub репозиторий , чтобы поделиться с сообществомэтот прогресс.

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