Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-FPM未从Dockerfile正确重新启动_Php_Docker_Dockerfile - Fatal编程技术网

PHP-FPM未从Dockerfile正确重新启动

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

我对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
但现在,当我这么做的时候,它仍然停止了

所以,我开始阅读,有人建议把它和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),标记不同,行为不相同。这有什么意义吗?如果在运行容器期间,映像配置未因环境或装载文件而更改,则同一映像的行为应一致。顺便说一句,您向社区提出问题以供审阅,我将推荐此方法