2016-07-22 39 views
0

我使用supervisor运行cron和nginx,问题是当我尝试COPYVOLUME挂载我的cron文件时,它不运行我的cron文件/etc/cron.dDocker不会运行带外部源的cron作业文件(主机-windows)

但是,当我将exec -it <container_id> bash放入容器并从里面创建完全相同的cron文件时,它立即被识别并按照它应该运行。

Dockerfile:

FROM phusion/baseimage:latest 

ENV TERM xterm 
ENV HOME /root 

RUN apt-get update && apt-get install -y \ 
    nginx \ 
    supervisor \ 
    curl \ 
    nano \ 
    net-tools 

RUN rm -rf /etc/nginx/* 
COPY nginx_conf /etc/nginx 

COPY supervisor_conf /etc/supervisor/ 
RUN mkdir -p /var/log/supervisor 

COPY crontabs /etc/cron.d/ 
RUN chmod -R 644 /etc/cron.d/ 

CMD /usr/bin/supervisord 

这个cron本身

* * * * * root curl --silent http://127.0.0.1/cronjob/cron_test_docker.php >> /var/www/html/log/docker_test.log 2>&1 

cron和nginx的通过主管

[supervisord] 
nodaemon = true 

[program:nginx] 
command = /usr/sbin/nginx -g "daemon off;" 
autostart = true 

[program:cron] 
command = /usr/sbin/cron -f 
autostart = true 

日志内运行与cron等环境stdoutstderr是空/var/log/supervisor/

我也试图剥离出来的主管,并通过PHUSION和CMD cron -f运行在自己的cron,但得到的是不工作的同样的问题当源是外部的(COPYVOLUME),并奇迹般地在容器内创建时的作品。

最初认为它是一个权限问题,并尝试chmod 644(因为这是在容器中创建的文件的权限)所有文件都是COPY的结果。

RUN chmod 644 /etc/cron.d/ 

之后尝试所有可能的权限组合与rwx无济于事。

另外,试图将cronjob的行追加到/etc/crontab中,但它在crontab -l中未被识别。

COPY crontab /tmp/crontab 
RUN cat crontab >> /etc/crontab 

这将是非常方便的,如果它的工作只是当它是通过COPYVOLUME创建,因为它是一个麻烦,以在容器中每次手动创建它。

任何帮助将不胜感激!

编辑1:

COPYVOLUME后的文件权限一些额外的信息。

  • 当我执行

    COPY crontabs /etc/cron.d/ 
    RUN chmod -R 644 /etc/cron.d/ 
    

    运行ls -l/etc/cron.d/容器内显示

    -rw-r--r-- 1 root root 118 Jul 20 11:03 wwwcron-cron-docker_test 
    
  • 当我通过我的docker-compose通过VOLUME

    安装文件夹

    ls -l显示

    -rwxrwxrwx 1 1000 staff 118 Jul 20 11:03 wwwcron-cron-docker_test 
    
  • 另外,如果我手动创建它看起来像这样的容器中的cron文件,这个工程

    -rw-r--r-- 1 root root 118 Jul 22 15:50 wwwcron-cron-docker_test_inside_docker 
    

显然有很大的不同权限和所有权在制作COPYVOLUME。但使用确切权限制作COPY不起作用,但在容器中创建时似乎工作。

+0

当您将容器导入为容器时,crontab文件在容器内看起来像什么? – BMitch

+0

@BMitch:在编辑1中增加了更多信息。如果你问的是内容 - 当然是完全一样的。 – Nathan

+0

你的主机操作系统是什么?你在Windows上编辑过cron文件吗?想知道你是否有换行问题。 – BMitch

回答

1

由于@BMitch能够找到其相关线路的结局,因为我的主机是Windows和cron的文件起源是Windows中的问题,以及有该行悬殊因此cron的结局并未自动提取。

我加入这一行我Dockerfile,它就像一个魅力

RUN find /etc/cron.d/ -type f -print0 | xargs -0 dos2unix 

及循环上,该文件的大小确实是1个字节小的运行DOS2UNIX的时候,这样你就可以验证,如果这个操作确实发生。

-rw-r--r-- 1 root root 117 Jul 25 08:33 wwwcron-cron-docker_test 
0

您是否尝试过在Dockerfile中将单独的命令安装为crontab?

... 
COPY crontabs /path/to/crontab.txt 
RUN crontab -u myUser /path/to/crontab.txt 
...