Git-Repo des Projekts: https://github.com/tombusby/docker-laravel-experiments (HEAD zum Zeitpunkt des Schreibens ist 823fd22).
Hier ist meine 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
In src/ habe ich ein neues Laravel-Projekt erstellt. Das alles funktioniert korrekt, wenn ich die index.php gegen eine mit Basic austausche echo "hello world";
und wenn ich benutze echo "called";exit();
Ich kann erkennen, dass ein Teil von Laravels index.php ausgeführt wird.
Es stirbt in Zeile 53:
$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);
Ich habe keine Ahnung, warum das passiert, und ich habe versucht, es zu verwenden docker exec -it <cid> bash
um mich in meinem php-fpm-Container nach Fehlerprotokollen umzusehen. Alle Protokolle werden an stderr/stdout (das von Docker gesammelt wird) umgeleitet.
Hier ist die Ausgabe, die Docker sammelt:
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" "-"
Wie Sie sehen können, hilft mir “500” so ziemlich nicht, herauszufinden, warum ein Fehler aufgetreten ist, aber ich kann keine Möglichkeit finden, den Stack-Trace oder ähnliche Fehlerprotokolle zu erhalten, die die PHP-Erweiterung von Apache erzeugt hätte.
Ich stehe vor einem sehr ähnliches Problem … haben Sie jemals die Ursache des Problems gefunden?
– chrisvdb
16. Juni 2016 um 3:51 Uhr
Die akzeptierte Antwort löst Ihr Problem. Die standardmäßige php-fpm-Konfiguration aus dem offiziellen Docker-Image hat Fehler deaktiviert. Wenn Sie versuchen, es mit zu aktivieren
ini_set
oder ähnliches, dann ignoriert php-fpm das. Sie müssen es in der php-fpm-Konfigurationsdatei mit festlegenphp_admin_flag[log_errors]
. Ich tat dies, indem ich mein Docker Compose eine kostomige PHP-FPM-Konfigurationsdatei über die vorhandene als schreibgeschütztes Volume mounten ließ.– Tom Busby
16. Juni 2016 um 11:46 Uhr
Wenn diese Frage ein Problem beschreibt, das Sie haben, sind Upvotes immer willkommen 😉
– Tom Busby
16. Juni 2016 um 11:48 Uhr
Erledigt. Eigentlich meinte ich, dass Ihr Basisproblem (Laravel funktioniert nicht, keine Protokolle funktionieren nicht) sehr ähnlich klang. Am Ende habe ich die Protokollierung wie vorgeschlagen aktiviert und festgestellt, dass das Problem mit den Berechtigungen von Bootstrap/Cache und Speicherverzeichnissen zusammenhängt. Das Hinzufügen von RUN chmod -R 777 zur Dockerfile löste das Problem. Bin mir aber nicht ganz sicher, ob es elegantere Lösungen gibt.
– chrisvdb
17. Juni 2016 um 6:32 Uhr
Ahhh, ok, sicher. Ja, Sie können Ihre Berechtigungen ändern, aber wenn Sie sich dadurch schmutzig fühlen:
user = 1000
Undgroup = staff
in Ihrer php-fpm.conf werden die Berechtigungsprobleme behoben (für Mac Docker, aber Probleme verursachen sie für Linux-Hosts).– Tom Busby
17. Juni 2016 um 15:28 Uhr