Docker CentOS 7 - cron 在本地机器上不工作

Docker CentOS 7 - cron not working in local machine

在我的 VPS 中,我创建了一个包含 cron 运行ning 作为入口命令的 docker 映像。我还有一个示例 cron 文件,说明它应该每 5 分钟执行一次命令。

Docker文件:

FROM centos:centos7
MAINTAINER Lysender <foo@example.com>

# Install packages
RUN yum -y update &&  yum clean all
RUN yum -y install epel-release && yum clean all

RUN yum -y install git \
    bind-utils \
    pwgen \
    psmisc \
    net-tools \
    hostname \
    curl \
    curl-devel \
    sqlite \
    cronie \
    libevent \
    gearmand \
    libgearman \
    libgearman-devel \
    php \
    php-bcmath \
    php-common \
    php-pear \
    php-mysql \
    php-cli \
    php-devel \
    php-gd \
    php-fpm \
    php-pdo \
    php-mbstring \
    php-mcrypt \
    php-soap \
    php-xml \
    php-xmlrpc \
    php-pecl-gearman && yum clean all

# Configure servicies
ADD ./start.sh /start.sh
ADD ./my-cron.conf /etc/cron.d/my-cron

RUN chmod 755 /start.sh

CMD ["/bin/bash", "/start.sh"]

我的-cron.conf 文件:

# Run command every 5 minutes
*/5 * * * * root echo "foo" >> /tmp/logit.log 2>&1

start.sh

#!/bin/bash

__run_cron() {
    echo "Running the run_cron function."
    crond -n
}

# Call all functions
__run_cron

然后我这样构建它:

docker build --rm -t lysender/cron-php-gearman .

然后运行:

docker run --name cron -d lysender/cron-php-gearman

5 分钟后,我检查了 cron 是否工作:

docker exec -it cron bash
cat /tmp/logit.log

有效。所以我把它推到 docker 中心到我的帐户。

docker push lysender/cron-php-gearman

然后拉入我的本地机器,运行 它就像我在 VPS 主机上所做的那样。

但是,没有迹象表明 cron 实际上 运行s,例如:/tmp/logit.log 文件从未创建。

哪里出了问题?

机器规格:

两者都是 运行 普通用户(非 root)。

不过,区别在于 CentOS 镜像。

我已经提取了一个新的 CentOS7 映像,这样两个映像都已经存在 5 周了,但我没有先删除映像(只是 updated/pulled)。

所以我拉CentOS 7,然后拉lysender/cron-php-gearman。我的理解是它应该 运行ning 在较新的 CentOS 7 映像之上。

我已经决定不使用 stock cron 守护进程,并基于此 Dockerfile 切换到基于 python 的 devcron

https://registry.hub.docker.com/u/hamiltont/docker-cron/dockerfile/

这是我的新 Dockerfile。

https://github.com/lysender/docker-cron-php-gearman/blob/master/Dockerfile

Devcron:https://bitbucket.org/dbenamy/devcron

原因是,在清除整个本地 docker 安装并安装新的 docker 图像后,库存 cron 在我的本地设置中仍然无法正常工作。

这将是我暂时的临时解决方案。

感谢您的帮助。

似乎是 Centos 上的容器特定问题: https://github.com/CentOS/CentOS-Dockerfiles/issues/31 RUN sed -i '/session required pam_loginuid.so/d' /etc/pamd.d/crond