ソムリエでエンジニアのブログ

ワインの事も書きたいけど基本エンジニア用

PHPコンテナにLaravelスケジューラーの設定を追加するとnginxコンテナとの接続でエラーが出た

発生した事

cronLaravelアプリを同一コンテナに入れ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を登録する方法に関しては下記の記事を参考にさせていただきました。

zenn.dev

原因

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"

上記でエラーを解決する事ができました。