発生した事
cron
とLaravel
アプリを同一コンテナに入れnginx
と接続しようとすると502 Bad Gateway
が発生した。
nginx
側のエラーログを確認すると以下のような内容が...
connect() failed (111: Connection refused) ... 続く
どのようなDockerfileを使っていたか
一部省略しますが以下のようなDockerfile
を利用していました。
FROM php:8.0-fpm-buster COPY ./config/cron/root /etc/cron.d/cron RUN apt-get update \ && apt-get -y install git libzip-dev wget cron \ ... 省略 ... && chmod 0644 /etc/cron.d/cron \ && touch /var/log/cron.log \ && touch /var/log/sample.log CMD cron
dockerにcron
を登録する方法に関しては下記の記事を参考にさせていただきました。
原因
CMD
は1ファイル一回に一度しかかけず最後に記載のあるものが実行されるようです。
その為、php:8.0-fpm-buster
で定義されているCMD ["php-fpm"]
が実行されずこのようなエラーとなっているようです。
対応策
CMD ["php-fpm"]
が実行されるようDockerfile
を以下のように修正します。
FROM php:8.0-fpm-buster COPY ./config/cron/root /etc/cron.d/cron RUN apt-get update \ && apt-get -y install git libzip-dev wget cron \ ... 省略 ... && chmod 0644 /etc/cron.d/cron \ && touch /var/log/cron.log \ && touch /var/log/sample.log CMD sh -c "cron && php-fpm"
上記でエラーを解決する事ができました。