我一直在尝试在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"]
docker-compose.yml
inventory:
build: .
restart: always
command: npm start
ports:
- "80:80"
environment:
- NODE_ENV=production
答案 0 :(得分:0)
默认情况下,docker将在parent
进程上运行。一种技巧是,添加一个将在后台运行cron的 @ManyToOne
@Column(name = "parent_id") // Your child field
@JoinColumn(name="id") // Your parent id field
private Parent parent;
脚本,然后调用CMD
节点应用程序。
但是我宁愿运行两个容器,一个用于CRON,另一个用于应用程序,这将有助于分离出冷杉容器。一个容器将以entrypoint
的身份运行CMD
,另一个容器将运行其他运行节点应用程序。
如果要共享使用卷挂载可能的文件系统。