Python 脚本在 docker 容器中找不到带有 CRON 的 ENV 变量 运行
Python script can't find ENV variable run with CRON in docker container
我想 运行 Docker 容器中的 Python 脚本与 crontab,现在 cron 成功 运行 python 脚本但是它不能' t 找到从 Docker 文件给出的 ENV 变量,当我 运行 从容器内部回显 $DOG 时显示预期的字符串“dog”,或者当 ik manaully 运行 python script /> python dog.py
它可以找到 ENV 变量。所以 ENV 在容器内的 OS 中。
为什么 cron 无法访问脚本 运行ning?
Crontab
* * * * * /usr/local/bin/python3 /app/dog.py > /proc/1/fd/1 2>/proc/1/fd/2
# empty line
Docker文件
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。
Docker 文件
...
CMD ["./entry.sh"]
entry.sh
#!/bin/bash
printenv | grep -v "no_proxy" >> /etc/environment
cron -f
我想 运行 Docker 容器中的 Python 脚本与 crontab,现在 cron 成功 运行 python 脚本但是它不能' t 找到从 Docker 文件给出的 ENV 变量,当我 运行 从容器内部回显 $DOG 时显示预期的字符串“dog”,或者当 ik manaully 运行 python script /> python dog.py
它可以找到 ENV 变量。所以 ENV 在容器内的 OS 中。
为什么 cron 无法访问脚本 运行ning?
Crontab
* * * * * /usr/local/bin/python3 /app/dog.py > /proc/1/fd/1 2>/proc/1/fd/2
# empty line
Docker文件
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。
Docker 文件
...
CMD ["./entry.sh"]
entry.sh
#!/bin/bash
printenv | grep -v "no_proxy" >> /etc/environment
cron -f