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中断(例如Ctrl – C ),并尽可能正常退出。
# 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
- 如何在Docker容器中启动tomcat8服务器,以便将进程保持在docker容器的范围内
- :: SetDiGetDeviceRegistryProperty()失败与Docker for Windows上的SPDRP_BUSTYPEGUID
- 在Docker中覆盖nginx的html目录来编写configuration
- 无法从本地主机连接到mysql容器
- PHP的cURL访问无法远程Docker中心/registry
- Docker swarm – 容器绑定到ethx IP
- Docker卷,重启始终启用选项
- Docker-Swarm:从另一个子网join一个docker-swarm
- 如何在一个docker集装箱上安装多个PHP版本