猿问

PHP-FPM 不会从 Dockerfile 启动

我正在尝试完成一些非常简单的事情,我想使用 dockerfile 从 docker 容器启动 php-fpm 服务。我的 dockerfile 内容发布在下面:

   FROM debian
   RUN apt-get update && apt-get install php -y && apt-get install php7.3-fpm -y && service php7.3-fpm start

当我从 dockerfile 构建此映像并将其作为容器运行时,php-fpm 服务未激活。

我什至尝试使用 docker 的“交互模式”(-i arg)来确保在服务作为守护进程运行的情况下容器不会退出。

我很困惑,因为我的 dockerfile 中的命令 RUN service php7.3-fpm start应该已经启动了该服务。

为了成功启动容器内的服务,我实际上必须使用命令手动登录docker exec -it #containerID bash并自己运行命令service php7.3-fpm start,然后服务才能工作并变为活动状态。

我不明白为什么 php-fpm 服务没有从我的 Dockerfile 自动启动,任何帮助将不胜感激。提前致谢!


哈士奇WWW
浏览 386回答 1
1回答

茅侃侃

初步估计,像这样的命令service在 Docker 中根本不起作用。Docker 容器仅运行一个前台进程。这通常不是一个初始化系统,或者如果是的话,它也足以处理一些杂务,例如僵尸进程清理。相反,Docker 映像仅包含文件系统映像和一些有关如何启动该进程的元数据,但它不会保留任何正在运行的进程。例如,如果你RUN service php7.3-fpm start它可能会在某个文件中记录该服务应该已启动,但是一旦命令RUN完成,正在运行的进程就不再存在。获得正在运行的 PHP-FPM 设置的最简单方法是使用Docker Hubphp映像:FROM php:7.3-fpm这应该完成所有必需的设置,包括安排 FPM 服务器作为主容器命令运行;您只需要COPY输入您的应用程序代码即可。如果您确实想自己运行它,则需要将其作为自定义映像的主要命令CMD ["php-fpm"]php:7.3-fpm正如Dockerfile中所做的那样。
随时随地看视频慕课网APP
我要回答