代码之家  ›  专栏  ›  技术社区  ›  Sam Munroe

cron服务没有以docker container启动

  •  0
  • Sam Munroe  · 技术社区  · 6 年前

    我一直试图在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/*
    

    停靠文件

    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 回复  |  直到 6 年前
        1
  •  0
  •   Akash Sharma    6 年前

    默认情况下,Docker将只在 CMD 过程。一个是,加一个 entrypoint 在后台运行cron然后调用 命令 节点应用程序。 但我更喜欢运行两个容器,一个用于cron,另一个用于有助于分离关注点的fir容器的应用程序。一个容器将运行 cron 作为 命令 以及其他运行节点应用程序。

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