Unable to send php7.3 fpm-alpine error logs to std within docker containers
This seems to be working now. I simplified in this example to keep it easy on the eye.
my_php_1 | [26-May-2019 09:40:40] NOTICE: fpm is running, pid 1
my_php_1 | [26-May-2019 09:40:40] NOTICE: ready to handle connections
my_php_1 | 172.22.0.3 - 26/May/2019:09:40:51 +0000 "GET /index.php" 500
my_nginx_1 | 172.22.0.1 - - [26/May/2019:09:40:51 +0000] "GET / HTTP/1.1" 500 5 "-" "curl/7.38.0" "-"
my_nginx_1 | 2019/05/26 09:40:51 [error] 8#8: *1 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected end of file, expecting ',' or ';' in /app/index.php on line 4" while reading response header from upstream, client: 172.22.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://172.22.0.2:9000", host: "0.0.0.0:1080"
my_php_1 | [26-May-2019 09:40:51] WARNING: [pool www] child 8 said into stderr: "NOTICE: PHP message: PHP Parse error: syntax error, unexpected end of file, expecting ',' or ';' in /app/index.php on line 4"
my_php_1 | 172.22.0.3 - 26/May/2019:09:42:49 +0000 "GET /index.php" 200
my_nginx_1 | 172.22.0.1 - - [26/May/2019:09:42:49 +0000] "GET / HTTP/1.1" 200 12 "-" "curl/7.38.0" "-"
my_nginx_1 | 172.22.0.1 - - [26/May/2019:09:42:56 +0000] "GET /no.php HTTP/1.1" 404 153 "-" "curl/7.38.0" "-"
docker-compose.yaml
version: "3.4"
services:
my_php:
build:
context: "./php"
volumes:
- "..:/app"
my_nginx:
build:
context: "./nginx"
ports:
- "1080:80"
volumes:
- "..:/app"
depends_on:
- "my_php"
PHP
Dockerfile
FROM php:7.2.13-fpm-alpine3.8
WORKDIR /app
COPY php.ini /usr/local/etc/php/conf.d/php.override.ini
COPY www.conf /usr/local/etc/php-fpm.d/www.conf
CMD ["php-fpm", "--nodaemonize"]
php.ini
[PHP]
date.timezone=UTC
log_errors=On
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors=Off
max_execution_time=60
memory_limit=256M
www.conf
[global]
daemonize=no
[www]
user=www-data
group=www-data
listen=my_nginx:9000
pm=dynamic
pm.max_children=40
pm.start_servers=2
pm.min_spare_servers=2
pm.max_spare_servers=4
pm.max_requests=500
NGINX
Dockerfile
FROM nginx:1.15.8-alpine
WORKDIR /app
COPY app.conf /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/nginx.conf
app.conf
server {
listen 80 default_server;
server_name localhost;
root /app;
index index.php;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass my_php:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
Related videos on Youtube
BentCoder
Updated on September 18, 2022Comments
-
BentCoder over 1 year
I cannot get the php-fpm error logs appear in docker std. So far I've tried many suggestions but for some reason no progress at all. I am posting my whole setup so that someone could kindly help me to right direction. All I see is
app_php_1 | 172.21.0.7 - 06/Apr/2019:12:26:37 +0000 "GET /index.php" 500
PHP-FPM
Dockerfile
FROM php:7.2.13-fpm-alpine3.8 RUN apk update \ && apk add --no-cache $PHPIZE_DEPS \ bash git zip unzip RUN docker-php-ext-install opcache RUN docker-php-ext-enable opcache RUN rm -rf /var/cache/apk/* COPY php.ini /usr/local/etc/php/conf.d/php.override.ini COPY www.conf /usr/local/etc/php-fpm.d/www.conf WORKDIR /app CMD ["php-fpm", "--nodaemonize"]
php.ini
[php] date.timezone=UTC log_errors=On error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors=Off max_execution_time=60 memory_limit=256M [opcache] opcache.enable_cli=1 opcache.memory_consumption=256 opcache.max_accelerated_files=20000 realpath_cache_size=4096K realpath_cache_ttl=600
www.conf
[global] daemonize=no [www] user=www-data group=www-data listen=app_nginx:9000 pm=dynamic pm.max_children=30 pm.start_servers=2 pm.min_spare_servers=2 pm.max_requests=1000
NGINX
Dockerfile
FROM nginx:1.15.8-alpine RUN apk add --no-cache bash RUN rm -rf /var/cache/apk/* COPY app.conf /etc/nginx/conf.d/default.conf COPY nginx.conf /etc/nginx/nginx.conf COPY app_ssl.crt /etc/ssl/certs/app_ssl.crt COPY app_ssl.key /etc/ssl/private/app_ssl.key
app.conf
server { listen 80; server_name localhost; root /app/public; listen 443 default_server ssl; ssl_certificate /etc/ssl/certs/app_ssl.crt; ssl_certificate_key /etc/ssl/private/app_ssl.key; location / { try_files $uri /index.php$is_args$args; } location ~ ^/index\.php(/|$) { fastcgi_pass app_php:9000; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_hide_header X-Powered-By; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; internal; } location ~ \.php$ { return 404; } }
nginx.conf
user nginx; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; use epoll; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format json_combined escape=json '{' '"time_local":"$time_local",' '"remote_addr":"$remote_addr",' '"remote_user":"$remote_user",' '"request":"$request",' '"status": "$status",' '"body_bytes_sent":"$body_bytes_sent",' '"request_time":"$request_time",' '"http_referrer":"$http_referer",' '"http_user_agent":"$http_user_agent"' '}'; access_log /var/log/nginx/access.log json_combined; fastcgi_buffers 8 16k; fastcgi_buffer_size 32k; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; server_tokens off; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection '1; mode=block'; add_header X-Frame-Options DENY; add_header Strict-Transport-Security 'max-age=31536000; includeSubdomains; preload'; add_header 'Referrer-Policy' 'no-referrer-when-downgrade'; types_hash_max_size 2048; gzip on; include /etc/nginx/conf.d/*.conf; }
docker-compose.yml
version: "3" services: app_php: build: context: "./php" volumes: - "../..:/app:consistent" app_nginx: build: context: "./nginx" ports: - "5080:80" - "5443:443" volumes: - "../..:/app:consistent" depends_on: - "aapp_php"
WHAT I TRIED
I tried these independently from each other/file, not all in one go.
Changed
/proc/self/fd/2
to/dev/stdout
//dev/stderr
forerror_log
andaccess.log
properties in/usr/local/etc/php-fpm.d/docker.conf
file.Added code below at the bottom of
www.conf
file.
catch_workers_output = yes php_flag[display_errors] = off php_admin_flag[log_errors] = on php_admin_value[error_log] = /var/log/php-fpm-error.log php_admin_value[error_log] = /dev/stdout php_admin_value[error_log] = /dev/stderr
- Some more but I lost track of it.
-
trinvh about 5 yearsHi Bent, any luck with this issue? I'm having a similar issue so I can't debug where is the application crashed
-
BentCoder about 5 yearsI postponed for a while so I'll go back to it one day.
-
BentCoder almost 5 years@trinvh Check answer below please.
-
trinvh almost 5 yearsI answered this myself but still upvote for your full solution :+1