【问题标题】:DOCKERFILE start multiple processes at onceDOCKERFILE 一次启动多个进程
【发布时间】:2021-10-28 20:42:59
【问题描述】:

我正在尝试创建一个运行 Nginx 并允许使用 php7.4-fpm 在 VM 上加载 PHP 页面的 docker 映像。我能够启动我的 Nginx,它适用于 HTML 页面,但我找不到与 Nginx 同时启动 php7.4-fpm 的方法。我希望能够在这个 Nginx 服务器上加载 PHP 页面。是否可以在 ENTRYPOINT 命令中同时启动几件事?我的 FROM 中有一个 ubuntu:18.04 的基础层,然后安装了 nginx 和 php7.4-fpm。谢谢。

ENTRYPOINT ["nginx", "-g", "daemon off;"] #Can I start php-fpm here as well??

【问题讨论】:

  • 我尝试了所有这些方法,但我的容器没有实际运行就立即退出,我不知道为什么
  • 你试过`docker logs --details`看看发生了什么吗?
  • 它不会想出任何东西:(,不确定是什么问题
  • 如果在每个容器中运行一个进程,麻烦会少很多。 IE。一个 nginx 容器和一个单独的 PHP 容器。查看此页面上“php:-fpm”标题下的示例hub.docker.com/_/php

标签: php docker nginx dockerfile


【解决方案1】:

我假设您这样做是为了学习如何编写 Dockerfile。 (如果你真的只是想使用它,我很确定,如果你搜索它,你会找到一个带有 nginx 和 php 的容器。另外你应该考虑搜索一个基于 alpine 之类的容器,因为 ubuntu 容器会消耗大量资源。)

在这种情况下,我通常在容器内使用包含我的命令的启动脚本。我不知道你想要哪些命令,但我只用 ping 创建了一个示例。

您可以在工作目录中创建一个名为 docker-entrypoint.sh 的文件:

#!/usr/bin/env bash

ping localhost &
ping stackoverflow.com

命令末尾的 & 有这样的效果,它在后台运行,之后您可以启动其他命令。

您应该确保您的最后一个命令末尾没有那个&符号,并且它应该是blocking command,否则容器将退出,一旦最后一个命令完成并且所有后台命令都将停止了。

在Dockerfile里面使用

ENTRYPOINT [ "./docker-entrypoint.sh" ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多