如何在Rails docker容器中以非root用户身份执行cron任务?

时间:2018-10-12 06:50:19

标签: ruby-on-rails docker cron infrastructure

我正在尝试使用cron作为docker容器中的非root用户。 容器已经由非root用户拥有Rails应用程序,我想以同一用户身份执行cron任务,同时使Rails服务器同时运行。 但是,当我运行docker-compose up -d时,出现一条错误消息,提示 cron:无法打开或创建/var/run/crond.pid:权限被拒绝

所以我的问题是,在具有Rails应用程序的容器中,是否可以以非root用户身份执行cron任务。 请注意,出于安全原因,我尝试不使用root帐户。 预先谢谢您!

这是我的dockerfile床 ...

FROM ruby:2.5

RUN apt-get update -qq && apt-get install -y --no-install-recommends \
    build-essential \
    libpq-dev \
    nodejs \
    cron \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean

ENV \
 USER=new_user \
 GROUP=new_user \
 APP_ROOT=/var/www/new_user \
 HOME=/home/new_user \
 RAILS_PATH=./apps/server/new_user

RUN groupadd $GROUP && \
 useradd -g $GROUP $USER

RUN mkdir -p $APP_ROOT && \
 mkdir -p $HOME

WORKDIR $APP_ROOT

COPY $RAILS_PATH/Gemfile .
COPY $RAILS_PATH/Gemfile.lock .
COPY $RAILS_PATH/config/puma.rb config/puma.rb
COPY $RAILS_PATH/config/schedule.rb config/schedule.rb

RUN \
 gem update --system && \
 gem install bundler && \
 bundle config --global build.nokogiri --use-system-libraries && \
 bundle config --global jobs 2 && \
 bundle install --path=vendor/bundler

RUN \
 chown -R $USER $HOME && \
 chown -R $USER $APP_ROOT && \
 chgrp -R $GROUP $APP_ROOT && \
 chgrp -R $GROUP $APP_ROOT

USER $USER

RUN bundle exec whenever --update-crontab

CMD cron -f && bundle exec puma -C config/puma.rb

...

1 个答案:

答案 0 :(得分:0)

您可以使用宝石arask而不是任何时候使用。它在Rails中运行任务,因此用户是相同的。只需从config/initializers/arask.rb引用您的任务,就不必再运行cron了。