我做了一个Dockerfile,但当我运行它并进入容器时,php8.0-fpm服务没有运行。
如何使其在构建时运行?请注意,我在Docker文件中运行了命令service php8.0-fpm start
,但即使这样它也不会运行。
我应该怎么做才能让php8.0-fpm服务与容器一起启动?
下面是我制作的Dockerfile:
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"]```
3条答案
按热度按时间v7pvogib1#
Docker容器只运行一个进程。它本身并不“运行服务”。映像构建也不保留任何正在运行的进程。当您启动容器时,映像的
ENTRYPOINT
或CMD
将是容器中唯一运行的内容。避免技术原因,我会大致建议像
service
或systemctl
这样的命令在Docker中不起作用。例如,RUN service php8.0-fpm restart
什么也不做:在这个命令之前,php-fpm没有运行,在RUN
命令之后,它也不会运行。您通常会将其重新构造为多个单独的容器,并使用诸如Docker Compose之类的工具将它们全部运行在一起。Docker有几个official sample applications可以证明这一点。基于编写的设置可能如下所示
您的
Dockerfile
将以FROM php:8.0-fpm
开头,并且只包含与PHP相关的设置;Dockerfile.apache
将以FROM httpd:2.4
开头,并且只复制静态资产和Apache配置。您的代理设置需要使用名称ProxyPass "/" "fcgi://php:9000"
引用另一个容器;有关其他详细信息,请参阅Docker文档中的Networking in Compose。请注意,即使在这种情况下,像
docker-compose exec apache service apache2 status
这样的代码仍然不会显示“服务正在运行”,但如果您使用docker-compose exec apache ps -e
,您将看到容器中的HTTP守护进程是进程1。这是正常的。igsr9ssn2#
我设法将它放在一个容器中,PHP有一个名为Supervisor的扩展,安装了它后,我们能够在容器中启动两个或更多服务。
文档文件如下所示:
我为Supervisor创建了两个配置文件。
apache.conf
fpm.conf
就这样,这两个服务启动了,并且运行得很完美!
oyxsuwqo3#
您需要在启动时运行php fpm。如果你在你的vm操作系统上安装了bash,你可以这样做。
入门标志
Cmd[“/bin/bash”,“-c”,“php-fpm8&&Include Your Apache here”]
完整指南:How to setup PHP 8, NGINX and PHP-FPM with docker