Php 如何在Docker映像上启动服务?

Php 如何在Docker映像上启动服务?,php,nginx,docker,dockerfile,php-7,Php,Nginx,Docker,Dockerfile,Php 7,我已经为一个映像创建了一个在FPM+Nginx上运行PHP7的脚本,但是我无法让该映像正确启动服务 究竟应该如何做到这一点 以下是我目前正在做的部分: CMD service php7-fpm start; \ service php7-fpm status; \ service nginx start; \ service nginx status 您需要一个流程管理器,如supervisor、s6、daemontools或任何其他 例如,参见主管的文档 在管理多个服

我已经为一个映像创建了一个在FPM+Nginx上运行PHP7的脚本,但是我无法让该映像正确启动服务

究竟应该如何做到这一点

以下是我目前正在做的部分:

CMD service php7-fpm start; \
    service php7-fpm status; \
    service nginx start; \
    service nginx status

您需要一个流程管理器,如supervisor、s6、daemontools或任何其他

例如,参见主管的文档


在管理多个服务时,您需要用户监督

在您的Dockerfile中

Additional commands...
RUN apt-get update && apt-get install -y supervisor
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
Additional commands...
CMD ["/bin/supervisord", "-c /etc/supervisor/conf.d/supervisord.conf"]
supervisord.conf

[supervisord]
nodaemon=true

[program:php7]
command=<command to start php7>
autostart=true
autorestart=true
<repeat for additional services>...
[supervisord]
nodaemon=true
[节目:php7]
命令=
自动启动=真
自动重新启动=真
...

这将确保容器不会在一切启动后退出。请记住,Docker应该是一个单进程环境,该进程作为一项服务在前台而不是后台运行。

使用另一个包(如supervisor)而不是内置的System V/upstart作业,这是Nginx/PHP的常见用例,其优势是什么?另外,有没有什么原因导致
CMD
不能工作?容器和图像已经不存在了。另一个答案解决了这个问题并解释了它。看来主管确实是答案。但是为什么
CMD服务nginx启动不起作用呢?如上所述,它不起作用,因为Docker希望应用程序在前台运行。当您将应用程序作为服务启动时,它将在后台启动,容器将退出。因此,如果您希望容器在运行时保持不动,则需要确保服务在前台运行,而不是作为服务运行。另外,如果您只想运行nginx而不想运行其他任何东西,您可以转到:
CMD[“nginx”,“-g”,“daemon off;”]
,再次注意到进程没有被守护,而是在前台运行。明白了!我认为“docker应该是一个单进程环境”,你的意思是它是一个约定,而不是一个技术约束。