项目的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项目。如果我使用一个简单的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扩展将生成的适当错误日志。
ini_set
或类似方法启用它,则php-fpm会忽略它。您需要在php-fpm配置文件中使用php_admin_flag[log_errors]
进行设置。我通过让我的Docker Compose挂载一个自定义的php-fpm配置文件到现有的只读卷上来实现这一点。 - Tom Busbyuser = 1000
和group = staff
将解决权限问题(适用于Mac Docker,但可能会导致Linux主机出现问题)。 - Tom Busby