Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python无法读取Docker容器中的环境变量_Python_Docker_Cron - Fatal编程技术网

Python无法读取Docker容器中的环境变量

Python无法读取Docker容器中的环境变量,python,docker,cron,Python,Docker,Cron,我试图为一个可以从python脚本读取的容器设置一个环境变量 python脚本通过容器化的cron作业运行。当直接在容器中运行脚本时,没有cronjob,我能够读取环境变量 我的文件是 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/

我试图为一个可以从python脚本读取的容器设置一个环境变量

python脚本通过容器化的cron作业运行。当直接在容器中运行脚本时,没有cronjob,我能够读取环境变量

我的文件是

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)

我在这里还创建了一个简单的示例:。

一个可能的解决方案是在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前面的点很重要。

Cron可能会清空环境。请参阅以获取解决方案。不幸的是,这对meI不起作用,因为它能够通过在我的cron命令中导出变量来读取变量:
***export TESTING=1&&cd/opt/&&/usr/local/bin/python runner.py>/var/log/cron.log 2>&1
。虽然这不是理想的解决方案,因为我希望在测试和生产中保持相同的cron作业。实际上,您不能使用
源代码
(可靠且可移植)
cron
使用
sh
,而不是
bash
;另见