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


Git项目回购: https://github.com/tombusby/docker-laravel-experiments (撰写本文时的头部是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扩展所产生的正确错误日志。


7816
2018-05-06 12:47


起源

我面对的是 非常 类似的问题......你有没有找到问题的根本原因? - chrisvdb
接受的答案将解决您的问题。来自官方docker iamge的默认php-fpm配置已关闭错误。如果您尝试启用它 ini_set 或类似然后php-fpm忽略了这一点。你需要在php-fpm配置文件中设置它 php_admin_flag[log_errors]。我这样做是通过让我的docker将现有的一个php-fpm配置文件作为只读卷安装。 - Tom Busby
此外,如果这个问题描述了你遇到的问题,那么总是赞赏upvotes;) - Tom Busby
完成。实际上,我的意思是你的基本问题(Laravel不工作,而不是日志不工作)听起来非常相似。最后我按照建议启用了日志记录,发现问题在于引导/缓存和存储目录的权限。将RUN chmod -R 777添加到Dockerfile解决了这个问题。但是,不完全确定是否有更优雅的解决方案。 - chrisvdb
啊,好的,当然。是的你可以777你的权限,但如果这让你感到肮脏​​: user = 1000 和 group = staff 在你的php-fpm.conf中将修复权限问题(对于mac docker,但probs会导致它们用于linux主机)。 - Tom Busby


答案:


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

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

你的选择是:

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

14
2018-05-06 14:29



最后有效的东西,我一直在寻找这个! php_admin_flag[log_errors]=On - peedee


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


0
2018-05-06 12:55



那不是问题。一切都正常用于基本的hello world应用程序。我的问题是我得到500,我想查看日志以找出发生的原因。我找不到任何日志。 - Tom Busby
你对“hello world app”有什么意义? - Luigi Pressello
如,“你好世界”: - Tom Busby
<?php echo“hello world”; - Tom Busby
我想我们在这里感到困惑:我只是想知道如何获取日志。我对解决导致错误的原因并不感兴趣,因为我自己在获取错误日志。 - Tom Busby