【发布时间】:2018-04-20 01:14:50
【问题描述】:
我目前正在 Rancher 上的 Docker 组合设置中运行 Django Web 应用程序。因为我希望服务器定期运行 Django 管理命令,所以我为它设置了一个 crontab。
* * * * * root /usr/local/bin/python /usr/src/app/manage.py updatesomething >> /usr/src/app/cron.log 2>&1
我正在使用下面显示的 Dockerfile,如您所见,我尝试使用 CMD ["cron", "-f"] 独立运行 crontab。这可以正常工作并按应有的方式运行命令。 然而,这个想法是它可以在 Web 应用程序上并行运行并触发管理命令。我还验证了 crontab 文件是否存在。
cron.log 文件保持为空超过 10 分钟,因此 cron 显然没有在这里完成它的工作。有没有人可以在python:3 容器中并行运行 cron 的解决方案?主管不是一个真正的选择,因为我有一个 Python 3 代码库。而且我还不能让Circus 使用另一个容器中的数据库。
############################################################
# Dockerfile to run a Django-based web application
# Based on a Python 3 image
############################################################
# Set the base image to use to Python 3
FROM python:3
RUN apt-get update -qq && apt-get install -y -qq --force-yes cron
COPY ./docker/crontab/updatesomething /etc/cron.d/updatesomething
RUN chmod 0644 /etc/cron.d/updatesomething
RUN mkdir -p /usr/src/app /srv/logs
WORKDIR /usr/src/app
# Install dependencies
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
RUN cron
# Copy application files
COPY . /usr/src/app/
# Port to expose
EXPOSE 8000
# Copy entrypoint script into the image
COPY docker_entrypoint.sh /docker_entrypoint.sh
RUN chmod +x /docker_entrypoint.sh
CMD ["/docker_entrypoint.sh"]
【问题讨论】:
-
您必须在
docker_entrypoint.sh中启动 cron。可以为 cron 启动一个独立的容器,为 wsgi Web 服务器启动另一个容器。RUN无法启动诸如crond之类的守护进程。 -
有关在 docker 中运行 cron 的详细信息,请参阅此问题。 stackoverflow.com/questions/37458287/…
-
@HåkenLid 啊,谢谢,我忽略了
RUN并未在目标机器上实际运行,因此无法启动cron的部分。我现在还有一些数据库问题,但我想我可以解决这些问题