Cron 作业和 docker

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

我有一个网络爬虫。它必须定期运行。我想使用 Docker 来托管脚本 cronjob 和数据库。我可以在下面编写 Dockerfile 和 docker-compose.yaml。我在命令运行 `docker-compose -f docker-compose.yaml build` 时收到以下错误。爬虫文件位于文件 src/main.py 上,文件“cron-config”上的 cron 作业内容为 `0 0 * * * python3 /app/src/main.py >> /app/logs/cron.log 2>&1`。你能看出我哪里失败了吗?

错误日志:

> [crawler 6/7] RUN crontab /etc/cron.d/cron-config:

0.243 /bin/sh: 1: crontab: not found

docker-compose.yaml:

version: "3.8"

services:
  crawler:
    build: 
      context: .
      dockerfile: Dockerfile
    networks:
      - CNPJ_net
    restart: unless-stopped

  crawler-db:
    image: postgres:14
    restart: always
    env_file: .env
    networks:
      - CNPJ_net
    expose:
      - "$POSTGRES_PORT"
    ports:
      - "$POSTGRES_PORT:$POSTGRES_PORT"
    volumes:
      - postgres_data:/var/lib/postgresql/data

networks:
  CNPJ_net:

volumes:
  postgres_data:

Dockerfile:

FROM python:3.8-slim

WORKDIR /app

# Copy your application code
COPY . .

# Copy the crontab file to the cron.d directory
COPY cron-config /etc/cron.d/cron-config

# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/cron-config

# Apply cron job
RUN crontab /etc/cron.d/cron-config

# Create the log file to be able to run tail
RUN touch /var/log/cron.log

# Run the command on container startup
CMD cron && tail -f /app/logs/cron.log

如有任何帮助,我们将不胜感激。

docker cron
2个回答
0
投票

看起来你的大部分 dockerfile 都是从this问题复制的。

您的错误(

crontab: not found
)表明未安装 crontab,并且在链接问题的 dockerfile 中,他们运行的第一个命令是安装 cron。

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

如果将其添加到 dockerfile 的顶部,它可以工作吗?


0
投票

您应该能够在 docker-compose 设置之外复制它:

➜  ~ docker run -it python:3.8-slim /bin/bash
root@xxx:/# crontab -l
bash: crontab: command not found

基础镜像似乎缺少 CLI。您可以使用 apt-get 来安装它,如here所述,或者只是使用不同的基本映像。

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