默认情况下,如何在 Docker 容器中启动 php-fpm?解释

2022-08-30 18:07:13

我有这个 Docker 映像 -

FROM centos:7
MAINTAINER Me <me.me>
RUN yum update -y
RUN yum install -y git https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

RUN yum install -y ansible
RUN git clone https://github.com/.../dockerAnsible.git
RUN ansible-playbook dockerFileBootstrap.yml
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;

VOLUME [ "/sys/fs/cgroup" ]
EXPOSE 80 443 3306

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

基本上,我希望它能让php-fpm在docker容器启动时启动。如果我手动进入容器并使用打开它,我有php-fpm工作。/usr/sbin/php-fpm

我用这个命令在我的ansible文件中尝试了它(它不起作用)。我也尝试使用服务模块,但没有运气。

 - name: Start php fpm
   command: /usr/sbin/php-fpm

我怎么能把 php-fpm 和 apache 一起运行?


答案 1

您应该使用,以便启动多个服务supervisor

在 docker 文件中,安装主管,然后启动

COPY ./docker/supervisord.conf /etc/supervisord.conf
....
CMD ["/usr/bin/supervisord", "-n"]

而且您的包含您要启动的所有服务,因此您可以拥有类似的东西docker/supervisord.conf

[program:php-fpm]
  command=/opt/remi/php70/root/usr/sbin/php-fpm -c /etc/php-fpm.conf
  ;command=/usr/sbin/php70-fpm -c /etc/php-fpm.d
  stdout_logfile=/dev/stdout
  stdout_logfile_maxbytes=0
  stderr_logfile=/dev/stderr
  stderr_logfile_maxbytes=0

[program:nginx]
  command=/usr/sbin/nginx
  stdout_logfile=/dev/stdout
  stdout_logfile_maxbytes=0
  stderr_logfile=/dev/stderr
  stderr_logfile_maxbytes=0

当然,你应该适应你的路径和php-fpm版本以及你的服务(在我的例子中是nginx,apache为你等),但基本上主管是从一个起点管理几个服务的开始的最佳方式。

在这里你可以找到Docker关于主管的官方文档

https://docs.docker.com/engine/admin/using_supervisord/


答案 2

我来到这里寻找如何在前台运行,以便它可以在docker容器中成为PID 1。解决方案是php-fpm

php-fpm -F -R

解释

我们可以检查可用的选项php-fpm --help

-F, --nodaemonize 
      force to stay in foreground, and ignore daemonize option from config file

如果您在 docker 容器中运行,则很有可能以 root 身份运行该进程。php-fpm 不会在没有额外标志的情况下以 root 身份启动:php-fpm

  -R, --allow-to-run-as-root
        Allow pool to run as root (disabled by default)

推荐