Python-зависимости и Docker и Crontab - PullRequest
0 голосов
/ 10 ноября 2018

У меня странная проблема при попытке запустить скрипт Python через Crontab в контейнере Docker. Вот настройки.

У меня есть такой Dockerfile:

FROM python:3-onbuild

# Install cron and dependencies
RUN apt-get update && apt-get -y install cron

# Add crontab file in the cron directory
ADD crontab /etc/cron.d/simple-cron
WORKDIR /src
COPY . /src

# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/simple-cron
RUN chmod 777 /usr/local/lib/python3.6/site-packages

# Create the log file to be able to run tail
RUN touch /var/log/cron.log

# Run the command on container startup
CMD ["cron", "-f"]

И файл crontab вот так:

* * * * * root python /src/test.py > /proc/1/fd/1 2>/proc/1/fd/2

Это выполняется правильно, без проблем, когда я запускаю контейнер. Первая строка моего файла Python - import redis, что приводит к сбою сценария, говоря, что модуль не найден.

Интересно то, что когда я вручную выполняю docker exec -it [container_name] python test.py, все работает точно так, как ожидалось.

В чем может быть проблема здесь? Я думаю, что файл требований не устанавливается в нужное место?

1 Ответ

0 голосов
/ 10 ноября 2018

С python в докере я определенно считаю полезным использовать инструмент вендоринга. Вместо того, чтобы копировать локальные пакеты сайта, запустите скрипт или серию команд RUN, которые:

  1. Установить виртуален
  2. Активировать его
  3. вызов pip install -r requirements.txt

Вот пример из скрипта, который я использую в dev:

pip3 install virtualenv;
virtualenv --no-site-packages --python=python3.6 app;
virtualenv --relocatable app;
source ./app/bin/activate;
pip3 install -r requirements.txt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...