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

标签 php docker ansible

我有这个 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"]

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

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

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

如何让 php-fpm 与 apache 一起运行?

最佳答案

您应该使用 supervisor 来启动多个服务

在你的 dockerfile 中,安装 supervisor,然后你启动

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 等),但基本上,supervisor 是从一个管理多个服务启动的最佳方式起点。

这里可以找到docker关于supervisor的官方文档

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

关于php - 默认情况下,如何在 Docker 容器中启动 php-fpm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37313780/

相关文章:

security - 使用非官方镜像的 Docker 安全问题

ansible - 如果任何任务失败,则执行任务(或处理程序)

json - 通过将 dict2items 和 JMESPath 与 ansible 结合,从复杂的 json 查询键

php - 如何获取 jQuery .post() 中的返回值

php - POST 和 GET 方法调用同一文件中的函数

php - 如何在数据透视表 Laravel 中使用附加字段

node.js - 使用docker-compose时如何为mongodb图像添加--auth?

docker - 如何在不使用Docker容器的情况下在Open Server中运行Docker镜像

substring - Jinja2模板中的条件子字符串

PHP:标准输出与 php://STDOUT