我一直试图在我的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
*/2 * * * * rm -rf /usr/src/app/assets/aligned_output/* && rm -rf /usr/src/app/assets/aligned_input/*
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
默认情况下,docker将在cmd
进程上运行。一个方法是,添加一个entrypoint
脚本,该脚本将在后台运行cron,然后调用cmd
节点应用程序。但我更喜欢运行两个容器,一个用于CRON,另一个用于application,这将有助于分离关注点fir容器。一个容器将cron
作为cmd
和其他运行节点应用程序运行。
如果您想要共享文件系统,可以使用卷挂载。
问题内容: 我使用以下命令创建了容器: 以下是命令: 真的没有太多要说的,我希望容器能启动并保持正常运行。这是日志: 问题答案: 您正在尝试运行,它是需要tty 才能运行的交互式外壳。使用,在“分离”模式下运行此命令实际上没有任何意义,但是您可以通过添加到命令行来做到这一点,以确保容器具有与其关联的有效tty并保持连接状态: 在启动分离的容器时,您通常会运行某种长期存在的非交互式进程(例如,或We
问题内容: 在我的Dockerfile中,我试图安装多个服务,并希望在启动容器时使它们全部自动启动。服务之一是mysql,当我启动容器时,我看不到mysql服务正在启动。当我尝试手动启动时,出现错误: Dockerfile: 我的start.sh文件: Docker构建: Docker运行: 我检查了图像,也无济于事。如何使用通过systemctl / service命令启动的服务启动容器。 问题
在我的Dockerfile中,我试图安装多个服务,并希望在启动容器时使它们都自动启动。其中一个服务是mysql,当我启动容器时,我没有看到mysql服务启动。尝试手动启动时,出现错误: DockerFile: 我已经检查了映像,但这也没有帮助。如何用使用systemctl/service命令启动的服务启动容器。
问题内容: 我运行基于节点映像的Docker容器(Windows的Docker快速入门终端) 我启动节点客户端(在端口3000上)和节点(基于Express)的服务器(在3009 端口上)。客户端通过AJAX调用访问REST服务器。 它可以完美地从主机运行(客户端访问localhost:3009并返回结果)。我可以拨打:3009,然后再次得到正确的结果。 但是当我构建并运行docker image
当我运行以下命令时,我将得到错误: 检测到体系结构x86-64。将主机名设置为。 正在从随机生成器初始化机器ID。 无法移动剩余的userspace进程,忽略:输入/输出错误