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

读了很多话题,但不明白发生了什么事情。 在将入口点添加到我的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脚本的最佳解决scheme是什么? 或者也许我在说错话

问题是这样的:

在后台启动nginx

您需要在前台运行一个进程。 如果没有,容器将退出。 我认为你应该保持nginx在前台运行。

find了把composer php放在一个单独的容器中的方法。 所以我不会碰到我的php-fpm,因为最好的做法是每个容器一个进程。 我的应用程序容器包含所有项目文件(composer.json,.git等)将提供Dockerfile:

 FROM composer/composer:php5 # Set application directory WORKDIR /var/www/html ENTRYPOINT /usr/local/bin/composer install CMD ["true"] 

在启动docker-compose up -d这将把composer.json的所有依赖关系带入映射目录。

ENTRYPOINT和CMD被合并在一起,以创build在容器启动时运行的最后一个COMMAND。 在你的情况下,这给了:

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

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

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

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

你的CMD应该是空的:

CMD []

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

docker run -d my_php_fpm_image --help