php - Docker php5-fpm 服务已退出(代码 0)

标签 php docker docker-compose

阅读了很多主题,但无法理解发生了什么。在将 ENTRYPOINT 添加到 Dockerfile 之前,一切正常。容器立即停止,不会妖魔化 php-fpm:

FROM php:5.6-fpm

// ..Some installation instructions

# Entrypoint script
COPY ./run.sh /run.sh
RUN chmod +x /run.sh

ENTRYPOINT ["/run.sh"]
CMD ["php-fpm"]

run.sh的内容:

# Install all dependencies
php -d allow_url_fopen=on /usr/local/bin/composer install

据我了解,我的入口点将使用 run.sh 执行,然后退出。如果我将其删除,那么默认入口点将在后台启动 nginx。在不重新定义入口点的情况下运行 shell 脚本的最佳解决方案是什么?或者也许我说错了话..

最佳答案

ENTRYPOINTCMD 组合起来创建容器启动时运行的最终命令。在你的情况下,这给出:

["/run.sh", "php-fpm"]

这意味着 php-fpm 充当 /run.sh 脚本的参数。这显然不是你想要的。

您可以通过在脚本中启动 php-fpm 并使用 exec 确保它作为 PID1 运行来解决此问题。以进程 ID 1 运行主进程可确保它将接收 SIGKILL 和 SIGTERM 中断(例如 Ctrl-C)并在可能的情况下正常退出。

# Install all dependencies
php -d allow_url_fopen=on /usr/local/bin/composer install
exec php-fpm

您的 CMD 应该为空(或删除,因为指定 ENTRYPOINT 也会重置 CMD):

CMD []

然后在您的容器中,您可以通过命令指定 php-fpm 的参数。例如:

docker run -d my_php_fpm_image --help

关于php - Docker php5-fpm 服务已退出(代码 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40047329/

相关文章:

php - MySQL - 如何在一行中运行多个更新查询?

php - Ajax删除复选框删除第一个或上一个,不是必需的 - jquery

docker - 我们可以在多个计算机(主机)上运行单个容器吗?

docker - 'network_mode' 和 'networks' 不能组合解决方法

php - cron 作业会终止最后一次 cron 执行吗?

php - 如何使用 WAMP 安装 PHPUnit?

sql-server - Docker SQL Server异常

Docker 中心图像缓存似乎不起作用

python - 为什么在 Docker 镜像中使用 requirements.txt

php - Docker:如何在多个容器/服务之间共享相同的应用程序代码(例如PHP-FPM和NGINX)