Python脚本在docker容器中找不到使用CRON运行的ENV变量

Coe*_*7st 3 python environment cron docker

我想使用 crontab 在 Docker 容器中运行 Python 脚本,现在 cron 成功运行了 python 脚本,但它找不到 Dockerfile 给出的 ENV 变量,当我从容器内部运行 echo $DOG 时,会显示预期的字符串“dog”或者当 ik 手动运行 python 脚本时,/> python dog.py它可以找到 ENV 变量。所以 ENV 位于容器内的操作系统中。

为什么 cron 运行的脚本无法访问?

定时任务

* * * * * /usr/local/bin/python3 /app/dog.py > /proc/1/fd/1 2>/proc/1/fd/2
# empty line
Run Code Online (Sandbox Code Playgroud)

Dockerfile

FROM python:3.10

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

WORKDIR /app/

COPY crontab .

COPY dog.py .

RUN chmod -R 755 /app/

RUN crontab /app/crontab

CMD ["cron", "-f"]
Run Code Online (Sandbox Code Playgroud)

狗.py

* * * * * /usr/local/bin/python3 /app/dog.py > /proc/1/fd/1 2>/proc/1/fd/2
# empty line
Run Code Online (Sandbox Code Playgroud)

docker-compose.yaml

FROM python:3.10

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

WORKDIR /app/

COPY crontab .

COPY dog.py .

RUN chmod -R 755 /app/

RUN crontab /app/crontab

CMD ["cron", "-f"]
Run Code Online (Sandbox Code Playgroud)

Coe*_*7st 7

我通过运行 bash 脚本解决了这个问题,该脚本在容器启动时将所有变量放入 /etc/environment 中。

Dockerfile

...

CMD ["./entry.sh"]
Run Code Online (Sandbox Code Playgroud)

入口.sh

...

CMD ["./entry.sh"]
Run Code Online (Sandbox Code Playgroud)