Cron服务不是从docker容器开始的

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

我一直在尝试在我的docker容器中运行一个cron作业,而我似乎无法在启动容器时运行cron服务。我可以远程进入正在运行的容器并运行“cron”以使服务无故障地启动。我把它包含在我的DockerFile中,为什么命令没有被执行?

我可以通过执行以下操作来实现它(如上所述):

docker-compose build
docker-compose up -d
docker exec -it my_container /bin/bash
root@2348723ae34: /etc/init.d/cron status <--check cron service status
[FAIL] cron is not running ... failed!  <--- cron not running
root@2348723ae34: cron
[ ok ] cron is running. <-- simply running cron starts the service

crontab文件

*/2 * * * * rm -rf /usr/src/app/assets/aligned_output/* && rm -rf /usr/src/app/assets/aligned_input/*

DockerFile

FROM node:latest

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app

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

# Add crontab file in the cron directory
ADD crontab /etc/cron.d/hello-cron

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

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

# 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 /var/log/cron.log

RUN touch /etc/crontab /etc/cron.*/*

EXPOSE 80
RUN npm install
CMD ["npm", "start"]

泊坞窗,compose.yml

inventory:
   build: .
   restart: always
   command: npm start
   ports:
   - "80:80"
   environment:
      - NODE_ENV=production
docker cron docker-compose cron-task
1个回答
0
投票

默认情况下,docker将在CMD进程上运行。一个黑客是,添加一个将在后台运行cron的entrypoint脚本,然后调用CMD节点应用程序。但我更喜欢运行两个容器,一个用于CRON,另一个用于应用程序,这将有助于分离冷杉容器的问题。一个容器将运行cron作为CMD和其他运行节点应用程序。

如果您想共享可能使用卷装入的文件系统。

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