2016-07-22 5 views
0

私はsupervisorを使用してcronとnginxを実行しますが、問題は、COPYまたはVOLUMEに私のcronファイルをマウントしません。 /etc/cron.dDockerは外部起点(ホスト - ウィンドウ)を持つcronジョブファイルを実行しません

しかし、私が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のは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を通じて自分自身でのcronを実行しようとしたが、ソースが( COPYまたは VOLUME)外部にあり、魔法のように、コンテナ内に作成するときに動作したときに、それが機能していないのと同じ問題を得ました。

最初はアクセス許可の問題であると考えられ、chmod 644(これはCOPYの結果であったすべてのファイルのコンテナに作成されたファイルのアクセス許可であるため)を試しました。無駄にrwxと許可のすべての可能な組み合わせを試した後

RUN chmod 644 /etc/cron.d/ 

また、クローンのラインを/etc/crontabに追加しようとしましたが、crontab -lでは認識されません。

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

コンテナたびに手動で作成するには面倒であるとして、それはCOPYまたはVOLUMEによって作成されたときだけで働いていた場合、それは本当に便利になります。

ご協力いただければ幸いです!

編集1:COPYまたはVOLUME

ファイルのパーミッションについてのいくつかの追加情報。私は私のdocker-compose

VOLUME貫通フォルダをマウントすると

  • 私は/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 
    
  • を示し私は手動でそれは次のようになり、容器内のcronファイルを作成する場合

    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

おかげすなわち

は、私のホストマシンは、Windowsとcronファイルの起源は、同様のラインでの格差があった窓があったので、語尾をラインに関連した問題を見つけることができました結局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 
... 
関連する問題