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)。

这是我的 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

进入 src/ 我创建了一个新的 laravel 项目。如果我将 index.php 换成具有基本 echo "hello world"; 的,并且如果我使用 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 扩展会产生。

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

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

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

您的选择是:

  • 在 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)