Configuración de Docker php-fpm/nginx: php-fpm arroja 500 en blanco, sin registros de errores

4 minutos de lectura

Git repo del proyecto: https://github.com/tombusby/docker-laravel-experimentos (HEAD al momento de escribir es 823fd22).

Aquí está mi 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

En src/ he creado un nuevo proyecto de laravel. Todo esto funciona correctamente si cambio index.php por uno con un básico echo "hello world"; y si uso echo "called";exit(); Puedo identificar que parte de index.php de laravel se ejecuta.

Muere en la línea 53:

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

No tengo idea de por qué sucede esto, y he intentado usar docker exec -it <cid> bash para echar un vistazo a mi contenedor php-fpm en busca de registros de errores. Todos los registros se redirigen a stderr/stdout (que recopila Docker).

Aquí está la salida que recopila la ventana acoplable:

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" "-"

Como puede ver, “500” no hace prácticamente nada para ayudarme a determinar por qué hubo un error, pero no puedo encontrar ninguna forma de obtener el seguimiento de la pila ni nada parecido a los registros de error adecuados que habría producido la extensión php de apache.

  • estoy frente a un muy problema similar… ¿alguna vez encontró la causa raíz del problema?

    – chrisvdb

    16 de junio de 2016 a las 3:51

  • La respuesta aceptada resolverá su problema. La configuración predeterminada de php-fpm de la ventana acoplable oficial tiene errores desactivados. Si intenta habilitarlo con ini_set o similar, entonces php-fpm ignora eso. Debe configurarlo en el archivo de configuración php-fpm usando php_admin_flag[log_errors]. Hice esto haciendo que mi ventana acoplable componga el montaje de un archivo de configuración costom php-fpm sobre el volumen existente como un volumen de solo lectura.

    – Tom Busby

    16 de junio de 2016 a las 11:46


  • Además, si esta pregunta describe un problema que está teniendo, siempre se agradecen los votos a favor;)

    – Tom Busby

    16 de junio de 2016 a las 11:48

  • Hecho. En realidad, quise decir que su problema base (Laravel no funciona, no los registros no funcionan) sonaba muy similar. Al final, habilité el registro como se sugirió y descubrí que el problema estaba relacionado con los permisos de arranque/caché y directorios de almacenamiento. Agregar RUN chmod -R 777 al Dockerfile resolvió el problema. Sin embargo, no estoy del todo seguro de si hay soluciones más elegantes.

    – chrisvdb

    17 de junio de 2016 a las 6:32

  • Ahhh, vale, seguro. Sí, puedes 777 tus permisos, pero si eso te hace sentir sucio: user = 1000 y group = staff en su php-fpm.conf solucionará los problemas de permisos (para Mac Docker, pero los problemas los causan para los hosts de Linux).

    – Tom Busby

    17 de junio de 2016 a las 15:28

Avatar de usuario de AcidReign
reino ácido

Según nuestra discusión en ##php en freenode…

Su problema es que la configuración de php.ini “log_errors” está desactivada.

tus opciones son:

  • establecer log_errors=On en php.ini
  • establecer php_admin_flag[log_errors]= Activado en la configuración de su grupo (para el contenedor docker basado en php:5.6-fpm eso esta en el archivo /usr/local/etc/php-fpm.conf)
  • o posiblemente establecer log_errors=On en .user.ini (configuración por directorio de php, similar a .htaccess)

  • finalmente algo que funciona, ¡he estado buscando esto por mucho tiempo! php_admin_flag[log_errors]=On

    – pipí

    29 de noviembre de 2016 a las 9:24

Como puedo ver, está ejecutando la solicitud de una Mac, ¿el entorno docker también está configurado en Mac? Si es así, al ejecutar bash en el contenedor php-fpm, ¿puede intentar escribir en el volumen expuesto? (/var/www/html en el contenedor)

  • Ese no es el problema. Todo funciona correctamente para una aplicación básica de Hello World. Mi problema es que obtengo un 500 y quiero ver los registros para averiguar por qué sucedió eso. No puedo encontrar ningún registro.

    – Tom Busby

    6 mayo 2016 a las 12:56

  • ¿Qué quieres decir con una “aplicación hola mundo”?

    –Luigi Pressello

    6 mayo 2016 a las 13:42

  • como en, “hola mundo”:

    – Tom Busby

    6 mayo 2016 a las 13:56

  • – Tom Busby

    6 mayo 2016 a las 13:56

  • Creo que nos estamos confundiendo aquí: solo quiero saber cómo obtener los registros. No estoy tan interesado en resolver lo que está causando el error, como en obtener los registros de errores.

    – Tom Busby

    6 mayo 2016 a las 13:57

¿Ha sido útil esta solución?