【问题标题】:Python unable to read enviornment variables within Docker containerPython 无法读取 Docker 容器中的环境变量
【发布时间】: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 作业。

标签: python docker cron


【解决方案1】:

一种可能的解决方案是在您的 Dockerfile 中添加如下内容:

# install crontab
ENV TESTING=1

RUN echo "export TESTING=$TESTING" >> $HOME/.bashrc

还有……

* * * * * . $HOME/.bashrc; cd /opt/ && /usr/local/bin/python runner.py >> /var/log/cron.log 2>&1

$HOME 之前的点很重要。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 2018-12-03
  • 2016-03-07
  • 2021-06-25
  • 2019-11-21
  • 2016-05-30
  • 2018-03-04
相关资源
最近更新 更多