Using apache + php-fpm containers in docker-compose, I can’t get the php-fpm container to display any errors.
docker-compose.yml
version: '3'
services:
php:
build:
context: ./php
ports:
- 9000:9000
volumes:
- ./code:/code
- ./php/www.conf:/usr/local/etc/php-fpm.d/www.conf
environment:
ENVIRONMENT: local
web:
image: httpd:2.4
depends_on:
- php
ports:
- 80:80
volumes:
- ./code:/usr/local/apache2/htdocs
- ./web/httpd.conf:/usr/local/apache2/conf/httpd.conf
depends_on:
- php
php-fpm Dockerfile:
FROM php:5.6-fpm
php-fpm www.conf:
[global]
error_log = /proc/self/fd/2
[www]
user = www-data
group = www-data
listen = nginx:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
; Logging
; if we send this to /proc/self/fd/1, it never appears
access.log = /proc/self/fd/2
clear_env = no
; Ensure worker stdout and stderr are sent to the main error log.
catch_workers_output = yes
php_flag[display_errors] = on
php_admin_flag[log_errors] = on
;php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_value[error_reporting] = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED
php_admin_value[display_startup_errors] = on
docker-compose logs only shows php-fpm access logs, no error logs.
Tried all solutions proposed in post proposed as possible duplicate: PHP-FPM doesn't write to error log
None of them worked for me, check my comments down below.
2
Answers
Struggle hours to get this working.
In the file
docker-compose.yml
I mounted my logs (so they persist)In the
phpSettings.conf
file I have this:Make sure the mounted log files exist before starting the docker.
the trick seems to be naming my settings
zzz-phpSettings.conf
so is the last one to load. I overwrite the default docker php image http://www.conf settings with the very same settings (except the listen 0.0.0.0:9000).In this php-fpm+Nginx setup I managed to have nginx (error/access) logs to its own location + php-fpm error/access logs to its own place too, so loggins looks really nice.
In my case it was the
/usr/local/etc/php-fpm.d/docker.conf
which caused the troubles:The
error_log
directive’s value of/proc/self/fd/2
causes the log being written into the terminal/console where thedocker-compose up
is running.I just had to create a custom global fpm config file within the
/usr/local/etc/php-fpm.d/
directory and make it execute as the last one by naming itzz-global.conf
, so it can override thedocker.conf
values. Then I just needed to set the value for theerror_log
to a custom path within the php-fpm container e.g.:That’s it.
Maybe worth mentioning: my php.ini (modified php.ini-development) has following custom error logging related values: