Docker php-fpm/nginx-Setup: php-fpm wirft leere 500, keine Fehlerprotokolle

Lesezeit: 3 Minuten

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 festlegen php_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 Und group = 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

Benutzeravatar von AcidReign
AcidReign

Gemäß unserer Diskussion in ##php auf Freenode …

Ihr Problem ist, dass die php.ini-Einstellung “log_errors” auf Off gesetzt ist.

Ihre Optionen sind:

  • setze log_errors=On in php.ini
  • php_admin_flag setzen[log_errors]=On in Ihrer Pool-Konfiguration (für Docker-Container basierend auf php:5.6-fpm das steht in der datei /usr/local/etc/php-fpm.conf)
  • oder möglicherweise log_errors=On in .user.ini setzen (php’s per-dir config, ähnlich wie .htaccess)

  • Endlich etwas, das funktioniert, ich habe zu lange danach gesucht! php_admin_flag[log_errors]=On

    – Pipi

    29. November 2016 um 9:24 Uhr

Wie ich sehen kann, wird Ihre Anfrage von einem Mac ausgeführt. Ist die Docker-Umgebung auch auf dem Mac eingerichtet? Wenn ja, können Sie durch Ausführen von bash auf dem php-fpm-Container versuchen, in das exponierte Volume zu schreiben? (/var/www/html auf dem Behälter)

  • Das ist nicht das Problem. Bei einer einfachen Hello-World-App funktioniert alles richtig. Mein Problem ist, dass ich eine 500 bekomme, und ich möchte die Protokolle sehen, um herauszufinden, warum das passiert ist. Ich kann keine Protokolle finden.

    – Tom Busby

    6. Mai 2016 um 12:56 Uhr

  • Was meinst du mit einer “Hello World App”?

    – Luigi Pressello

    6. Mai 2016 um 13:42 Uhr

  • wie in “Hallo Welt”:

    – Tom Busby

    6. Mai 2016 um 13:56 Uhr

  • – Tom Busby

    6. Mai 2016 um 13:56 Uhr

  • Ich glaube, wir werden hier verwirrt: Ich möchte nur wissen, wie ich an die Protokolle komme. Ich bin nicht so sehr daran interessiert, die Ursache des Fehlers zu lösen, als vielmehr daran, die Fehlerprotokolle selbst zu erhalten.

    – Tom Busby

    6. Mai 2016 um 13:57 Uhr

1444560cookie-checkDocker php-fpm/nginx-Setup: php-fpm wirft leere 500, keine Fehlerprotokolle

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy