Search code examples
phpdockerdockerfilefpm

PHP-FPM does not start after container creation


I made a Dockerfile, but when I run it and enter the container, the php8.0-fpm service is not running.

How do I make it run at build time? Note that I run the command service php8.0-fpm start in the Dockerfile and even then it is not running.

What should I do for the php8.0-fpm service to start along with the container?

Below is the Dockerfile I made:

FROM ubuntu:jammy

ENV DEBIAN_FRONTEND=noninteractive

# Instalação Apache e PHP

RUN apt-get update && \
    apt-get install software-properties-common -y && \
    add-apt-repository ppa:ondrej/php -y && \
    apt-get update && \
    apt-get install -y \
    apache2 \
    libapache2-mod-php8.0 \
    libapache2-mod-php \
    php8.0-fpm \
    libapache2-mod-fcgid \

# Alteração sequência index

COPY /src/dir.conf /etc/apache2/mods-enabled

# Commitando a nova configuração

RUN service apache2 restart
RUN service php8.0-fpm restart

# Inserindo página info.php

COPY /src/info.php /var/www/html

# Alterando módulos de multiprocessamento

RUN service apache2 stop && \
    a2dismod php8.0 && \
    a2dismod php8.1 && \
    a2dismod mpm_prefork && \
    a2enmod mpm_event && \
    a2enconf php8.0-fpm && \
    a2enmod proxy && \
    a2enmod proxy_fcgi && \
    service apache2 restart && \
    service php8.0-fpm start

# Entrypoint para o conteiner iniciar o Apache

ENTRYPOINT ["apache2ctl", "-D", "FOREGROUND"]```

Solution

  • I managed to leave it in just one container, PHP has an extension called Supervisor and with it installed we were able to start two or more services inside the container.

    The Dockerfile looked like this:

    FROM httpd:2.4-alpine
    
    RUN apk update && \
        apk add \
        php \
        php-fpm \
        php-zip \
        composer \
        supervisor
    
    COPY . /usr/local/apache2/htdocs
    COPY httpd.conf /usr/local/apache2/conf/httpd.conf
    COPY supervisor /etc/supervisor
    
    WORKDIR /usr/local/apache2/htdocs
    
    CMD ["supervisord","-n", "-c", "/etc/supervisor/supervisord.conf"]
    

    And I created two configuration files for Supervisor.

    apache.conf

    [program:apache]
    command=httpd -DFOREGROUND
    autostart=true
    autorestart=true
    priority=10
    startretries=1
    startsecs=1
    stdout_logfile=/dev/stdout
    stdout_logfile_maxbytes=0
    stderr_logfile=/dev/stderr
    stderr_logfile_maxbytes=0
    

    fpm.conf

    [program:php-fpm]
    command = php-fpm8 --nodaemonize 
    autostart=true
    autorestart=true
    priority=5
    stdout_logfile=/dev/stdout
    stdout_logfile_maxbytes=0
    stderr_logfile=/dev/stderr
    stderr_logfile_maxbytes=0
    

    With that the two services started and it is working perfectly!