Cron не наследует переменные окружения в контейнере Docker

Я пытаюсь запустить cron внутри контейнера Docker, чтобы периодически обновлять базу данных, выполнять резервное копирование и т.д. Вот моя конфигурация задания cron:

*/1 * * * * (. /app/.env.development; echo $DJANGO_COLOR) >> /var/log/cron.log 2>&1
*/1 * * * * (. /app/.env.development; /usr/local/bin/python3 /app/src/manage.py command) >> /var/log/cron.log 2>&1
*/1 * * * * (export $(cat /app/.env.development | grep -v "^#" | xargs); /usr/local/bin/python3 /app/src/manage.py command) >> /var/log/cron.log 2>&1

Проблема:

Задание cron не наследует переменные окружения из моего контейнера Docker. Я попробовал загрузить переменные окружения с помощью . /app/.env.development, что работает для первой строки, но по какой-то причине сервер Django запускается без переменных окружения во второй и третьей строках.

Докерфайл cronjob:

FROM app as cron

RUN apt-get update && apt-get -y install cron

# Copy hello-cron file to the cron.d directory
COPY cron/app-cron /etc/cron.d/app-cron

# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/app-cron

# Apply cron job
RUN crontab /etc/cron.d/app-cron

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

Точка входа: /bin/bash -c "cron && tail -f /var/log/cron.log"

Можете ли вы объяснить, почему это происходит? Как я могу убедиться, что задание cron правильно загружает переменные окружения из файла .env?

Я решил эту проблему с помощью этого файла cronjob:

*/1 * * * * (/bin/bash -c '/app/src/cron-daily.sh') >> /var/log/cron.log 2>&1

и этот файл скрипта, используемый в качестве задания:

#!/bin/bash

# Export all variables from the .env.development file
set -o allexport
source /app/.env.development
set +o allexport

# Continue with what ever that needs your env variables
...
Вернуться на верх