Dockerizin一个python cronjob。

问题描述 投票:0回答:1

我有一个python脚本,应该用python3运行。现在我有一个需求,就是把它作为一个cronjob来运行。然后将整个包容器化。因此,当安装时,docker镜像应该设置cronjobs并在docker中运行python脚本。

我试着执行下面的内容,构建成功,运行也没有任何错误。但它不工作。

这里的问题是什么?

requirement.txt

Flask
waitress

app.py

from datetime import datetime

print("\nThis is the cronjob running...:" , str(datetime.now()),"\n")

Docker文件

FROM python:3-alpine

ENV PROJ_DIR="/app"
ENV CRON_SPEC="* * * * *"
ENV LOG_FILE="${PROJ_DIR}/app.log"

WORKDIR ${PROJ_DIR}

COPY . ${PROJ_DIR}

RUN pip install -r requirements.txt

CMD echo "${CRON_SPEC} python ${PROJ_DIR}/app.py >> ${LOG_FILE} 2>&1" > ${PROJ_DIR}/crontab

CMD crontab ${PROJ_DIR}/crontab

CMD crontab -l

CMD cron && tail -f ${LOG_FILE}
python docker cron dockerfile python-3.7
1个回答
1
投票

如前所述,只有最后一个 CMD 将被执行。你必须运行你的 shell 命令,并带有 RUN.

这里有一个你的工作例子 Dockerfile 并进行必要的调整。

FROM python:3-alpine

ENV PROJ_DIR="/app"
ENV LOG_FILE="${PROJ_DIR}/app.log"
ENV CRON_SPEC="* * * * *" 

WORKDIR ${PROJ_DIR}

COPY . ${PROJ_DIR}

RUN pip install -r requirements.txt
RUN echo "${CRON_SPEC} python ${PROJ_DIR}/app.py >> ${LOG_FILE} 2>&1" > ${PROJ_DIR}/crontab
RUN touch ${LOG_FILE} # Needed for the tail
RUN crontab ${PROJ_DIR}/crontab
RUN crontab -l
CMD crond  && tail -f ${LOG_FILE} #crond runs per default in the background

这能解决你的问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.