我有一个网络爬虫。它必须定期运行。我想使用 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
如有任何帮助,我们将不胜感激。
看起来你的大部分 dockerfile 都是从this问题复制的。
您的错误(
crontab: not found
)表明未安装 crontab,并且在链接问题的 dockerfile 中,他们运行的第一个命令是安装 cron。
RUN apt-get update && apt-get -y install cron
如果将其添加到 dockerfile 的顶部,它可以工作吗?
您应该能够在 docker-compose 设置之外复制它:
➜ ~ docker run -it python:3.8-slim /bin/bash
root@xxx:/# crontab -l
bash: crontab: command not found
基础镜像似乎缺少 CLI。您可以使用 apt-get 来安装它,如here所述,或者只是使用不同的基本映像。