2016-07-22 4 views
0

관리자가 cron 및 nginx를 실행하는 데 사용합니다. 문제는 COPY 또는 VOLUME에 내 cron 파일을 마운트하려고 시도 할 때 내 cron 파일을 실행하지 않습니다. /etc/cron.dDocker가 외부 출처 (호스트 - 창)로 cron 작업 파일을 실행하지 않습니다

그러나 컨테이너에 넣고 정확히 동일한 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 

크론 자체

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

크론과의 nginx가 stdoutstderr가 비어는 cron에 관한 /var/log/supervisor/ 내부 관리자

[supervisord] 
nodaemon = true 

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

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

로그를 통해 실행합니다.

는 또한 관리자를 제거하고 phusion 및 CMD cron -f을 통해 자체 크론을 실행하는 시도했지만 소스 ( COPY 또는 VOLUME) 외부와 마술 컨테이너 내에서 만들 때 작동 때 작동하지 않는 같은 문제를 얻었다.

처음에는 사용 권한 문제로 생각되어 chmod 644 (이 내용은 COPY의 결과 인 모든 파일에 대해 컨테이너에 생성 된 권한이므로) 시도했습니다.

RUN chmod 644 /etc/cron.d/ 

rwx과 함께 사용 가능한 모든 조합을 사용하지 않으려 고 시도했습니다.

또한 cronjob의 라인을 /etc/crontab에 추가하려고했지만 crontab -l에는 인식되지 않습니다. 그것은 용기 매번에서 수동으로 작성하는 번거 로움이 그대로이 COPY 또는 VOLUME을 통해 생성 된 바로 그 때 일 경우

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

정말 편리 할 것입니다.

도움이 될 것입니다.

편집 1 : COPY 또는 VOLUME 후 파일 권한에 대한

몇 가지 추가 정보를 제공합니다.내가 VOLUME

통해 내 docker-compose을 통해 폴더를 마운트 할 때 내가 /etc/cron.d/ 내부 ls -l를 실행하는 용기 내부

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

을 수행

  • -rw-r--r-- 1 root root 118 Jul 20 11:03 wwwcron-cron-docker_test 
    
  • 보여줍니다 내가 수동으로이처럼 보이는 컨테이너에있는 크론 파일을 만들 경우 4,533,210

    ls -l는 또한

    -rwxrwxrwx 1 1000 staff 118 Jul 20 11:03 wwwcron-cron-docker_test 
    
  • 를 보여주고이

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

은 분명히 매우 다른 권한이 있습니다 작동 소유권을 COPY 또는 VOLUME으로 만들 때 그러나 정확한 사용 권한을 사용하여 COPY을 만드는 것은 작동하지 않지만 컨테이너에서 생성 된 경우 작동하는 것으로 보입니다.

+0

볼륨으로 가져올 때 컨테이너 내부의 crontab 파일은 어떻게 보이나요? – BMitch

+0

@BMitch : 편집 1에 추가 정보가 추가되었습니다. 요청한 내용이 콘텐츠 인 경우 - 물론 동일합니다. – Nathan

+0

호스트 OS는 무엇입니까? Windows에서 cron 파일을 편집 했습니까? 줄 바꿈 문제가 있는지 궁금합니다. – BMitch

답변

1

감사뿐만 아니라 라인에 차이가 있었다 나의 호스트 컴퓨터가 윈도우이고 크론 파일 원점 창 이후 엔딩 라인 관련 된 문제를 발견 할 수 있었다 결말 때문에 cron은 자동으로 그걸 가져 가지 않았습니다.

Dockerfile에이 줄을 추가하고 그것은 매력

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

와 같이 작동하는 DOS2UNIX가 실행될 때이 경우 확인할 수 있도록 파일의 크기는 실제로 1 바이트 작다에 반복 실제로 작동이 발생했습니다.

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

dockerfile에서 별도의 명령으로 crontab을 설치해 보셨습니까? @BMitch에

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