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



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

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

Crontab

* * * * * /usr/local/bin/python3 /app/dog.py > /proc/1/fd/1 2>/proc/1/fd/2
# empty line

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"]

dog.py

#!/usr/bin/python
import os
# Check os env variables
if "DOG" in os.environ:
dog = os.environ.get("DOG")
print(dog)
else:
print("no env")

docker-compose.yaml

---
version: "3.8"
services:
prd-workorder-worker:
build: .
environment:
- DOG=dog

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

Dockerfile

...
CMD ["./entry.sh"]

entry.sh

#!/bin/bash
printenv | grep -v "no_proxy" >> /etc/environment
cron -f

最新更新