PHP-FPM未从Dockerfile正确重新启动
我对PHP-FPM有一个奇怪的问题。首先,我不是PHP方面的专家。我正在构建一个应用程序,PHP将只与MySQL通信以推拉数据 问题是: 我有一个Dockerfile,其中我在PHP-FPM配置中做了一些更改,其中一行是重新加载PHP-FPM。实际上,当您安装PHP-FPM时,它没有运行,所以我会:PHP-FPM未从Dockerfile正确重新启动,php,docker,dockerfile,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),我通过以下方式解决了它: servic
RUN service php7.3-fpm start
当应用程序启动,我检查PHP-FPM时,它没有运行。我以前有过这个问题(使用php7-0-fpm),我通过以下方式解决了它:
service php7.0-fpm stop && service php7.0-fpm start
但现在,当我这么做的时候,它仍然停止了
所以,我开始阅读,有人建议把它和main命令一起放在CMD命令中。我做到了,而且成功了:
CMD service php7.3-fpm start && nginx -g "daemon off;"
现在,问题是它没有采用新的配置。当我进入机器并手动执行维修php7.3-fpm重新加载时
它开始工作
我也试着把它放进Dockrfile,但没有成功。有什么想法吗?我也想解决第一个问题(我不想从CMD重新启动PHP-FPM。最好在docker中使用运行层)
编辑
另一件奇怪的事情是,当我手动执行服务php7.3-fpm启动时,它不工作,但当我执行/etc/init.d/php7.3-fpm启动时它工作。当我在命令行中执行此操作时,似乎有效:
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指令执行命令或重新启动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
另外,最好为每个进程运行单独的容器,经验法则是每个容器运行一个进程
你看起来很好,它同时启动PHP和Nginx
要验证容器内的进程,请添加
RUN apt-get update && apt-get install procps -y
然后跑
docker exec -it your_container_id bash -c "ps -aux"
如果您想像您所说的那样在运行层中执行此操作,请阅读关于docker entrypoint
。另外,请提供您的Dockerfile以查看您在哪里配置FPM is setENTRYPOINT用于运行可执行文件。我的应用程序从启动nginx开始。我已经粘贴了Dockerfile,但它是否相关?注意docker容器通常没有init系统;容器不是VM,在大多数情况下,它们应该被视为一个“沙盒进程”,这意味着其中只有一个进程(或一个主进程)在运行。您可能希望查看Docker Hub上的官方PHP图像,它也有一个NPM变体(尽管没有安装nginx,它被认为是在自己的容器中运行的;问题是应用程序在7.0中运行良好。现在我不想做重大更改。这可能不是最好的实现方式。谢谢。我会这么做的。我意识到fpm并不总是正确启动,尽管将其放在CMD行中。我要ng想问另一个问题。这太疯狂了。相同的图像(具有相同的docker图像ID),标记不同,行为不相同。这有什么意义吗?如果在运行容器期间,映像配置未因环境或装载文件而更改,则同一映像的行为应一致。顺便说一句,您向社区提出问题以供审阅,我将推荐此方法