Docker CentOS 7 – cron不能在本地机器上工作
在我的VPS中,我创build了一个包含cron作为入口命令的docker镜像。 我也有一个示例cron文件,说它应该每5分钟执行一次命令。
Dockerfile:
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"]
my-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
然后我这样构build:
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的信号,例如: /tmp/logit.log
文件从不创build。
什么可能是错的?
机器规格:
- VPS:Linode在KVM,Docker 1.6.2上运行Slackware 14.1
- 本地:运行Slackware 14.1的VirtualBox VM,Docker 1.6.2 – 与VPS相同
两者都以普通用户身份运行(非root)。
但是,不同之处在于CentOS镜像。
- VPS:5周龄
- 本地:4个月大。
我已经拉了一个新的CentOS7图像,以便两者都将是5周大,但我没有删除图像(只是更新/拉)。
所以我拉了CentOS 7,然后拉lysender / cron-php-gearman。 我的理解是,它应该在最新的CentOS 7映像上运行。
在Centos上看起来像一个容器特定的问题: https : //github.com/CentOS/CentOS-Dockerfiles/issues/31 RUN sed -i '/session required pam_loginuid.so/d' /etc/pamd.d/crond
我决定不使用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镜像后,stock cron仍然不能正常工作。
这将是我现在的临时解决scheme。
谢谢您的帮助。