【问题标题】:Issues Starting PHP-FPM using Ubuntu Docker [closed]使用 Ubuntu Docker 启动 PHP-FPM 的问题 [关闭]
【发布时间】:2022-08-23 16:49:47
【问题描述】:

PHP FPM 似乎无法启动。 FPM 日志不会出现在任何地方。

码头工人文件

FROM ubuntu:16.04

RUN apt-get update -y && apt-get install -y software-properties-common language-pack-en-base && apt-get install sudo -y

RUN LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

RUN apt-get -y update && apt-get install -y \\
    php7.0-fpm \\
    php7.0-common \\
    php7.0-opcache \\
    php7.0-bcmath \\
    php7.0-pspell \\
    php7.0-recode \\
    php7.0-cli \\
    php7.0-tidy \\
    php7.0-dev \\
    php7.0-curl \\
    php7.0-gd \\
    php7.0-imap \\
    php7.0-intl \\
    php7.0-json \\
    php7.0-ldap \\
    php7.0-mbstring \\
    php7.0-mcrypt \\
    php7.0-mysql \\
    php7.0-pgsql \\
    php7.0 \\
    php7.0-xml \\
    php-memcached \\
    php-redis

# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer

## Make PHP FPM Log Dir
RUN mkdir -p /var/log/php7.0-fpm

## Copy and set PHP config files
COPY /containers/config/php-fpm.conf /etc/php/7.0/fpm/conf
COPY /containers/config/php.ini /etc/php/7.0/fpm/
COPY /containers/config/www.conf /etc/php/7.0/fpm/pool.d/

# Make App dir
RUN mkdir -p /app

# Switch to new App dir
WORKDIR /App

# Add contents of my-application project
ADD . /my-application

# Install dependencies with composer
RUN composer dump-autoload

# Expose port for php-fpm
EXPOSE 9000

CMD [\"sudo service php7.0-fpm start\"]

检查配置是否存在时,它们存在。

root@b8f3677b721b:/etc/php/7.0/fpm# ls -la
total 112
drwxr-xr-x 1 root root  4096 Jan  4 15:34 .
drwxr-xr-x 1 root root  4096 Jan  3 22:45 ..
-rw-r--r-- 1 root root  4424 Jan  4 15:34 conf
drwxr-xr-x 2 root root  4096 Jan  3 22:46 conf.d
-rw-r--r-- 1 root root  4421 Oct  8  2020 php-fpm.conf
-rw-r--r-- 1 root root 71010 Dec 22 16:37 php.ini
drwxr-xr-x 1 root root  4096 Jan  4 15:34 pool.d

PHP版本是正确的

root@b8f3677b721b:/etc/php/7.0/fpm# php -v
PHP 7.0.33-0ubuntu0.16.04.16 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.33-0ubuntu0.16.04.16, Copyright (c) 1999-2017, by Zend Technologies

试图以无效的方式直接调用初始化脚本似乎表明它在那里。

root@b8f3677b721b:/etc/init.d# sh php7.0-fpm
Usage: /etc/init.d/php-fpm7.0 {start|stop|status|restart|reload|force-reload}

尝试在容器中手动运行 php-fpm,结果如下

root@b8f3677b721b:/etc# sudo service php7.0-fpm start
root@b8f3677b721b:/etc# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   4380   656 ?        Ss   15:35   0:00 sleep infinity
root         8  0.0  0.0  18348  3408 pts/0    Ss   15:35   0:00 /bin/bash
root

   256  0.0  0.0  34428  2924 pts/0    R+   16:11   0:00 ps -aux

不知道还有什么可以在这里尝试和做的。我已经阅读了许多其他问题,但似乎没有一个答案/接受的解决方案有效。不确定这是否重要,我在另一个容器中运行 Nginx,同时在 nginx 配置中引用主机名。

  • service 广泛地在 Docker 中不起作用;你永远不需要sudo;并且您的 CMD 语法尝试将 \"sudo service start ...\" 作为单个 shell 字运行,包括空格,这应该会导致您在日志中看到错误。设置CMD [\"php-fpm\"] 会更好吗? (或者,您可以使用Docker Hub php:fpm image 而不是重复其工作吗?)
  • 有时最简单的事情就在你面前。使用 php7.0-fpm 图像开始。谢谢@DavidMaze。现在我只需要调整一些 nginx 的东西,我应该让它工作。

标签: php docker


【解决方案1】:

您不需要使用 PHP-FPM 服务,您可以在末尾使用 php-fpm 命令,如下所示:

CMD php-fpm

此外,如果您不需要ubuntu 图像提供的额外内容,您应该切换到php-fpm 图像,以便它只使用需要的内容。如果我没记错的话,你的最终容器会更轻,并且不太容易受到安全问题的影响。您还可以精细选择要使用的 PHP 版本。

【讨论】:

  • 您的解决方案几乎是大卫发表的评论。我会接受它,因为我已经让应用程序运行了一些额外的工作来启用它需要的扩展。为 php-fpm 图像不支持的扩展找到了一些解决方法。
  • @AndrewNolan,这可能会对您的这些扩展有所帮助:github.com/mlocati/docker-php-extension-installer
猜你喜欢
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 2019-04-30
相关资源
最近更新 更多