2017-05-26 19 views
2

私はドッカーにとってはかなり新しいです。私はphp:7-fpmイメージを使ってドッカーファイルを設定しました。私のサイトを動かすためにこのイメージを使用するのと同様に、私は定期的なタスクを実行できるようにcronを追加したいと思います。PHPで動作するようにcronを取得する:7-fpmイメージ

私はcronを作成し、正しいフォルダに入れて、docker exec -ti myimage_php_1 /bin/bashを実行してからcronを実行するか、またはtailのログファイルがすべて正常に動作します。しかし、コンテナが作成されたときにこれを動作させることはできません。私は明らかにcronを手動で起動する必要はありません。

私が理解から、私は起動時にcronコマンドを実行するCMDまたはENTRYPOINTを使用する必要があるが、私はこれを行うたびに、それは、元のPHPの必要CMD/ENTRYPOINT機能オーバーライドにより私に取り組んで、私のサイトを停止します7- fpm画像。 cronコマンドの両方をトリガーし、以前のようにphpで続ける方法はありますか?:7-fpm CMD/ENTRYPOINT

答えて

4

アプローチ#1

、このような何かカスタムentrypoint.shを作成します。

#!/bin/bash 

cron -f & 
docker-php-entrypoint php-fpm 

&に注意し、それが "バックグラウンドに送信" を意味します。

そして:

COPY ./entrypoint.sh/
ENTRYPOINT /entrypoint.sh 

アプローチ#2

しかし、supervisorをインストールして、より高度利用方法があり、docs(通常ドッカーで使用悪魔マネージャ)を参照。

ドッカーファイルの場合:

RUN apt-get update 

RUN apt-get install supervisor 
COPY ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf 
... 
CMD ["/usr/bin/supervisord"] 

supervisord.conf

[program:cron] 
command = cron -f 

[program:php] 
command = docker-php-entrypoint php-fpm 

いくつかのトラブルシューティングのコマンド:私の元の質問に、トリックを行っているようだ

docker exec <container-id> supervisorctl status 
docker exec <container-id> supervisorctl tail -f php 
docker exec <container-id> supervisorctl tail -f cron 
docker exec <container-id> supervisorctl restart php 
+0

おかげで、。しかし、私はentrypoint.shファイルを使って実行するともうUSER 'nginx'でユーザを変更することができず、 'su-nginx'は何もしないように見えるという点で2番目の問題があります。私はcronが走っている必要がありますが、ユーザーは 'nginx'です。 Dockerfileで 'USER nginx'を実行すると、私はentrypoint.shでcronを起動する権限がありません。これを回避する方法はありますか? – john

+0

crontabの情報を/ etc/crontabに入れ、コマンドの前にユーザー名を追加して編集します:https://serverfault.com/a/352837/171205 – Robert

+0

私があなたを誤解していない限り、問題はcronが実行されていないということです私はそれを開始する必要があります...しかし、entrypoint.shを実行する時点で、私のユーザーはrootではありません(私のアプリケーションのために 'USER nginx'にする必要があるので)、私は' cron:can ' tを開くか作成する/var/run/crond.pid:許可が拒否されました。それは私を狂ってしまう! – john

関連する問題