【问题标题】:cron inside docker not running jobs on linux host (but running jobs on mac host)docker内部的cron不在linux主机上运行作业(但在mac主机上运行作业)
【发布时间】:2020-03-26 17:38:34
【问题描述】:

我有一个在前台运行 cron 的测试 docker 容器。 cron 应该每分钟都说“你好”。但事实并非如此。它适用于我的 Mac,但不适用于我的服务器(Ubuntu 18.04.1)。如果没有安排任何 cron,它只是挂起并且什么也不做。

这是我的 Dockerfile (./crond/Dockerfile):

FROM alpine:3.10
RUN apk add --no-cache bash
RUN apk add --no-cache docker
RUN apk add --no-cache docker-compose

这是我的 docker-compose.yml (./):

version: '3.5'
services:
  cron:
    image: crond
    build:
      context: ./crond
    entrypoint: /docker-container-entrypoint
    volumes:
      - ./crontab:/var/spool/cron/crontabs/root
      - ./crond/entrypoint:/docker-container-entrypoint
      - /var/run/docker.sock:/var/run/docker.sock

这是入口点 (./crond/entrypoint)

#!/bin/bash
SHELL=/bin/bash crond -l 8 -f

这是 crontab 文件 (./crontab):

*  *  *  *  * echo "hello"

【问题讨论】:

    标签: docker cron


    【解决方案1】:

    首先,你应该使用docker dind image而不是使用alpine然后安装docker,docker dind也是基于alpine的。

    FROM docker:dind
    
    ADD crontab /etc/crontabs/root 
    
    CMD ["crond", "-f"]
    
    

    输出

    crond[1]: crond (busybox 1.30.1) started, log level 8
    crond[1]: USER root pid  14 cmd echo hello world from cron
    hello world from cron
    
    

    另外你不需要入口点,CMD 可以工作或将其更改为

    #!/bin/sh
    echo "starting cron job container"
    exec "$@"
    

    而cron挂载的路径是/etc/crontabs/

    【讨论】:

      【解决方案2】:

      我发现了类似的问题,但是如果我退出安装 cron 配置文件(在您的情况下为 ./crontab:/var/spool/cron/crontabs/root),并将 Dockerfile 到 COPY 配置到同一位置,它可以工作,

      FROM some-image
      
      COPY crontab /var/spool/cron/crontabs/root
      CMD crond -f
      

      【讨论】:

        猜你喜欢
        • 2014-04-20
        • 2016-11-26
        • 1970-01-01
        • 2012-01-13
        • 2012-12-28
        • 2015-12-28
        • 2016-12-07
        • 1970-01-01
        • 2012-01-10
        相关资源
        最近更新 更多