【问题标题】:Docker php5-fpm service exited (code 0)Docker php5-fpm 服务退出(代码 0)
【发布时间】:2016-10-14 15:52:09
【问题描述】:

阅读了很多主题,但无法理解发生了什么。在我将 ENTRYPOINT 添加到我的 Dockerfile 之前,一切正常。容器立即停止而不妖魔化 php-fpm:

FROM php:5.6-fpm

// ..Some installation instructions

# Entrypoint script
COPY ./run.sh /run.sh
RUN chmod +x /run.sh

ENTRYPOINT ["/run.sh"]
CMD ["php-fpm"]

run.sh的内容:

# Install all dependencies
php -d allow_url_fopen=on /usr/local/bin/composer install

据我了解,我的入口点将使用 run.sh 执行,然后退出。如果我将其删除,则默认入口点将在后台启动 nginx。在不重新定义入口点的情况下运行 shell 脚本的最佳解决方案是什么?或者我说错话了..

【问题讨论】:

    标签: php docker docker-compose


    【解决方案1】:

    ENTRYPOINTCMD 结合起来创建容器启动时运行的最终 COMMAND。在您的情况下,这给出了:

    ["/run.sh", "php-fpm"]
    

    这意味着php-fpm 充当/run.sh 脚本的参数。这显然不是你想要的。

    您可以通过在脚本中启动 php-fpm 并确保它使用exec 作为 PID1 运行来解决此问题。以进程 ID 1 运行主进程可确保它将接收 SIGKILL 和 SIGTERM 中断(例如 Ctrl-C)并在可能的情况下正常退出。

    # Install all dependencies
    php -d allow_url_fopen=on /usr/local/bin/composer install
    exec php-fpm
    

    您的 CMD 应该为空(或被删除,因为指定 ENTRYPOINT 也会重置 CMD):

    CMD []
    

    然后在您的容器中,您可以通过命令为 php-fpm 指定参数。例如:

    docker run -d my_php_fpm_image --help
    

    【讨论】:

      【解决方案2】:

      问题是这样的:

      在后台启动 nginx

      您需要一个在前台运行的进程。如果没有,容器将退出。我认为你应该让 nginx 在前台运行。

      为此,请使用:

      php-fpm -F -R
      

      来自php-fpm help

      -F, --nodaemonize 强制留在前台,并忽略配置文件中的守护进程选项
      -R, --allow-to-run-as-root 允许池以 root 身份运行(默认禁用)

      【讨论】:

      • 我需要一个能够在我的目标文件夹中自动部署 git 和 composer 的解决方案。所以我拿了我的 php-fpm 容器并将脚本放在 dockerfile 中。所有东西都部署在我的文件夹中,但是 php-fpm 没有启动,因为我将我的 composer install 放在 ENTRYPOINT 并且 CMD 命令根本没有启动
      • 我想你可能对 CMD 应该做什么感到困惑。见stackoverflow.com/questions/21553353/…。容器只运行一个进程。
      【解决方案3】:

      找到将作曲家放入单独容器的方法。所以我根本不会碰我的 php-fpm,因为最好的做法是每个容器一个进程。 我的包含所有项目文件(composer.json、.git 等)的应用容器将提供 Dockerfile:

      FROM composer/composer:php5
      
      # Set application directory
      WORKDIR /var/www/html
      
      ENTRYPOINT /usr/local/bin/composer install
      CMD ["true"]
      

      在启动 docker-compose up -d 后,这会将 composer.json 中的所有依赖项带入映射目录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-25
        • 2020-01-02
        • 2019-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-08
        相关资源
        最近更新 更多