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

Tom*_*sby 14 php error-logging nginx docker

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

这是我的docker-compose.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
Run Code Online (Sandbox Code Playgroud)

进入src /我创建了一个新的laravel项目.如果我将index.php替换为带有基本的一个,那么这一切都能正常运行echo "hello world";,如果我使用的话,echo "called";exit();我可以识别laravel的index.php的那部分确实被执行了.

它在第53行死亡:

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会这样,我已经尝试过浏览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" "-"
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,"500"几乎没有帮助我解决为什么会出现错误,但我找不到任何方法来获取堆栈跟踪或类似apache的php扩展所产生的正确错误日志.

小智 17

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

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

你的选择是:

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