Unable to send php7.3 fpm-alpine error logs to std within docker containers

5,784

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;
}

Share:
5,784

Related videos on Youtube

BentCoder
Author by

BentCoder

Updated on September 18, 2022

Comments

  • BentCoder
    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 for error_log and access.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
      trinvh about 5 years
      Hi Bent, any luck with this issue? I'm having a similar issue so I can't debug where is the application crashed
    • BentCoder
      BentCoder about 5 years
      I postponed for a while so I'll go back to it one day.
    • BentCoder
      BentCoder almost 5 years
      @trinvh Check answer below please.
    • trinvh
      trinvh almost 5 years
      I answered this myself but still upvote for your full solution :+1