我在使用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;"
答案 0 :(得分:2)
执行命令或使用RUN directive
重新启动php-fpm不会生效,因为每一层都在单独的外壳中运行。
最好的方法是从主机复制配置文件,重建映像,然后运行容器。
例如
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"