php - 无法从Dockerfile正确重启PHP-FPM

标签 php docker dockerfile

我在使用PHP-FPM遇到这个奇怪的问题。首先,我不是PHP方面的专家。我正在构建一个应用程序,PHP将仅与MySQL通信以推送和提取数据。

问题:

我有一个Dockerfile,在其中我对PHP-FPM配置进行了一些更改,其中之一是重新加载PHP-FPM。实际上,当您安装PHP-FPM时,它没有运行,所以我这样做:

RUN service php7.3-fpm start

当应用启动并检查PHP-FPM时,它没有运行。我之前(使用php7-0-fpm)遇到过此问题,我通过执行以下操作解决了该问题:
service php7.0-fpm stop && service php7.0-fpm start

但是现在,当我这样做时,它仍然停止了。

因此,我开始阅读,有人建议将其与主命令一起放入CMD命令中。我做到了,它奏效了:
CMD service php7.3-fpm start && nginx -g "daemon off;"

现在,问题在于它没有采用新配置。当我访问机器并手动执行service php7.3-fpm reload时,它开始工作。

我也尝试将其放入Dockrfile中,但是没有运气。任何的想法?我也想解决第一个问题(我不想从CMD重新启动PHP-FPM。最好在docker中使用RUN层来完成它)。

编辑

另一个奇怪的事情是,当我手动执行service php7.3-fpm start时,它不起作用,但是当我执行/etc/init.d/php7.3-fpm start时,它可以工作。当我在CMD行中执行此操作时,它似乎可以工作:
CMD /etc/init.d/php7.3-fpm start && nginx -g "daemon off;"

Dockerfile
FROM debian:buster

LABEL maintainer="me"

RUN apt-get update && apt-get install -y \
nginx \
default-mysql-client \
php7.3-fpm \
php7.3-mysql

RUN sed -i.bak "s/;clear_env = no/clear_env = no/g" /etc/php/7.3/fpm/pool.d/www.conf && \
sed -i.bak "s/;php_flag\[\display_errors\]\ = off/php_flag\[\display_errors\]\ = on/g" /etc/php/7.3/fpm/pool.d/www.conf

COPY ./html/ /var/www/html/

RUN rm /var/www/html/index.nginx-debian.html

WORKDIR /var/www/html/

EXPOSE 80

CMD service php7.3-fpm start && nginx -g "daemon off;"

最佳答案

执行命令或使用RUN directive重新启动php-fpm均无效,因为每一层都在单独的 shell 中运行。

最好的方法是从主机复制配置文件,重建镜像,然后运行容器。

例如

FROM debian:buster
COPY config/php7.ini /usr/local/etc/php/conf.d/
COPY config/fpm/php-fpm.conf /usr/local/etc/
COPY config/fpm/pool.d /usr/local/etc/pool.d

也最好为每个进程运行单独的容器,经验法则是每个容器都运行单个进程。

您CMD似乎很好,它可以同时启动PHP和Nginx。

要验证容器中的过程,请添加
RUN apt-get update && apt-get install procps -y


然后跑
docker exec -it your_container_id bash -c "ps -aux"

关于php - 无法从Dockerfile正确重启PHP-FPM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58182202/

相关文章:

php - while 在 foreach 循环内的 if 语句内循环......效果不佳

php - where 子句中的列 'code' 不明确

docker - Docker中的Dotnet Core开发

php - 如何将yaml添加到php服务器docker安装

cmd - 如何覆盖 docker run 行中的 CMD 命令

docker - 链接 Docker 镜像并按顺序执行

php - 列 'image' 不能为空

php 如果元素的 strlen 大于,则将数组的每个元素插入到 mysql 中

docker - 在不受信任的主机上运行的Docker容器

docker - docker中Supervisor的使用