Cron 不继承 Docker 容器中的环境变量

问题描述 投票:0回答:1

我正在尝试在 Docker 容器内运行 cron 来定期更新我的数据库、执行备份等。这是我的 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 Dockerfile:

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
文件加载环境变量?

python django docker cron
1个回答
0
投票

我用这个 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
...
© www.soinside.com 2019 - 2024. All rights reserved.