【发布时间】:2020-07-25 04:05:43
【问题描述】:
我正在尝试为可从我的 python 脚本读取的容器设置环境变量。
python 脚本通过容器化的 cron 作业运行。当直接在容器中运行脚本时,没有 cronjob,我可以读取我的环境变量。
我的 Dockerfile 是
FROM python:3.7-slim
# install crontab
RUN apt-get update && apt-get -y install -qq cron
# install crontab
ENV TESTING=1
ENV CONTAINER_HOME=/opt/
WORKDIR $CONTAINER_HOME
ADD runner.py .
COPY test-cron /etc/cron.d/test-cron
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/test-cron
RUN crontab /etc/cron.d/test-cron
RUN touch /var/log/cron.log
CMD cron && tail -f /var/log/cron.log
运行脚本的 cron 作业
# every 1 minutes
* * * * * cd /opt/ && /usr/local/bin/python runner.py >> /var/log/cron.log 2>&1
# An empty line is required at the end of this file for a valid cron file.
最后是运行的脚本
import os
print(os.environ)
我还在这里创建了一个最小示例:https://github.com/AndrewRPorter/python-docker-env。
【问题讨论】:
-
Cron 可能会清空环境。请参阅unix.stackexchange.com/questions/27289/… 以获得解决方案。
-
不幸的是,这对我不起作用
-
我可以通过在我的 cron 命令中导出变量来读取变量:
* * * * * export TESTING=1 && cd /opt/ && /usr/local/bin/python runner.py >> /var/log/cron.log 2>&1。这不是理想的解决方案,因为我希望为测试和生产保留相同的 cron 作业。