Docker php fpm/nginx设置:php fpm抛出空白500,没有错误日志


Docker php-fpm/nginx set-up: php-fpm throwing blank 500, no error logs

项目的Git回购:https://github.com/tombusby/docker-laravel-experiments(撰写本文时的HEAD为823fd22)。

这是我的码头组合。yml:

nginx:
  image: nginx:stable
  volumes:
    - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
  volumes_from:
    - php
  links:
    - php:php
  ports:
    - 80:80
php:
  image: php:5.6-fpm
  volumes:
    - ./src:/var/www/html
  expose:
    - 9000

Into src/我创建了一个全新的laravel项目。如果我把index.php换成一个具有基本echo "hello world";的index.php,并且如果我使用echo "called";exit();,我可以确定laravel的index.php的一部分确实被执行了,那么这一切都能正常工作。

它在第53行死亡:

$response = $kernel->handle(
    $request = Illuminate'Http'Request::capture()
);

我不知道为什么会发生这种情况,我已经尝试使用docker exec -it <cid> bash来查看我的php-fpm容器中的错误日志。所有日志都被重定向到stderr/stdout(由docker收集)。

以下是docker收集的输出:

php_1   | 172.17.0.3 -  06/May/2016:12:09:34 +0000 "GET /index.php" 500
nginx_1 | 192.168.99.1 - - [06/May/2016:12:09:34 +0000] "GET /index.php HTTP/1.1" 500 5 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36" "-"

正如你所看到的,"500"对我找出错误的原因几乎没有任何帮助,但我找不到任何方法来获取堆栈跟踪或类似于apache的php扩展所产生的正确错误日志。

根据我们在##php中对freenode的讨论。。。

您的问题是php.ini设置"log_errors"设置为Off。

您的选择是:

  • 在php.ini中设置log_errors=打开
  • 在池配置中设置php_admin_flag[log_errors]=On(对于文件/usr/local/etc/php-fpm.conf中基于php:5.6-fpm的docker容器)
  • 或者可能在.user.ini中设置log_errors=On(php的每个目录配置,类似于.htaccess)

正如我所看到的,Mac正在运行您的请求,docker环境是否也在Mac上设置?如果是的话,你可以通过在php-fpm容器上运行bash,尝试写入暴露的卷吗?(容器上的/var/www/html