【问题标题】:PHP-FPM wont start from a DockerfilePHP-FPM 不会从 Dockerfile 启动
【发布时间】:2020-06-22 23:52:09
【问题描述】:

亲爱的社区,你好,

我正在尝试完成一些非常简单的事情,我想使用 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 自动启动,非常感谢任何帮助。提前致谢!

【问题讨论】:

    标签: php docker docker-compose dockerfile containers


    【解决方案1】:

    大致而言,service 之类的命令在 Docker 中根本不起作用。

    一个 Docker 容器只运行一个前台进程。这通常不是一个初始化系统,或者如果是,它足以处理一些像僵尸进程清理这样的琐事。相反,一个 Docker 镜像只包含一个文件系统镜像和一些关于如何启动该进程的元数据,但它不会持久化任何正在运行的进程。例如,如果你

    RUN service php7.3-fpm start
    

    它可能会在某个文件中记录该服务应该已经启动,但是一旦RUN命令完成,正在运行的进程就不再存在了。

    获得运行 PHP-FPM 设置的最简单方法是使用Docker Hub php image

    FROM php:7.3-fpm
    

    这应该完成所有必需的设置,包括安排 FPM 服务器作为主容器命令运行;你只需要COPY你的应用程序代码。

    如果你真的想自己运行,你需要让它成为你自定义镜像的主命令

    CMD ["php-fpm"]
    

    正如在php:7.3-fpm's Dockerfile 中所做的那样。

    【讨论】:

    • 当然有一种简单的方法可以让服务在机器上启动,而无需切换到全新的图像或自定义启动脚本。
    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 2012-11-08
    • 2019-03-17
    • 2015-07-04
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    相关资源
    最近更新 更多