Não é possível enviar logs de erro php7.3 fpm-alpine para std em contêineres docker

Não consigo fazer com que os logs de erro php-fpm apareçam no docker std. Até agora eu tentei muitas sugestões, mas por algum motivo nenhum progresso em tudo. Estou postando toda a minha configuração para que alguém possa me ajudar na direção certa. Tudo o que vejo é 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.8RUN apk update \ && apk add --no-cache $PHPIZE_DEPS \    bash git zip unzipRUN docker-php-ext-install opcacheRUN docker-php-ext-enable opcacheRUN rm -rf /var/cache/apk/*COPY php.ini /usr/local/etc/php/conf.d/php.override.iniCOPY www.conf /usr/local/etc/php-fpm.d/www.confWORKDIR /appCMD ["php-fpm", "--nodaemonize"]

pai.ini

[php]date.timezone=UTClog_errors=Onerror_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICTdisplay_errors=Offmax_execution_time=60memory_limit=256M[opcache]opcache.enable_cli=1opcache.memory_consumption=256opcache.max_accelerated_files=20000realpath_cache_size=4096Krealpath_cache_ttl=600

www.conf

[global]daemonize=no[www]user=www-datagroup=www-datalisten=app_nginx:9000pm=dynamicpm.max_children=30pm.start_servers=2pm.min_spare_servers=2pm.max_requests=1000

NGINX

Dockerfile

FROM nginx:1.15.8-alpineRUN apk add --no-cache bashRUN rm -rf /var/cache/apk/*COPY app.conf /etc/nginx/conf.d/default.confCOPY nginx.conf /etc/nginx/nginx.confCOPY app_ssl.crt /etc/ssl/certs/app_ssl.crtCOPY app_ssl.key /etc/ssl/private/app_ssl.key

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

O QUE EU TENTEI

Eu tentei estes independentemente um do outro / arquivo, NEM todos de uma só vez.

  • Alteracao /proc/self/fd/2 para /dev/stdout//dev/stderr para error_log e access.log propriedades em /usr/local/etc/php-fpm.d/docker.conf arquivo.

  • Código adicionado abaixo na parte inferior do www.conf arquivo.

catch_workers_output = yesphp_flag[display_errors] = offphp_admin_flag[log_errors] = onphp_admin_value[error_log] = /var/log/php-fpm-error.logphp_admin_value[error_log] = /dev/stdoutphp_admin_value[error_log] = /dev/stderr
  • Mais um pouco, mas perdi a noção disso.

Isso parece estar funcionando agora. Eu simplifiquei neste exemplo para mantê-lo fácil nos olhos.


my_php_1    | [26-May-2019 09:40:40] NOTICE: fpm is running, pid 1my_php_1    | [26-May-2019 09:40:40] NOTICE: ready to handle connectionsmy_php_1    | 172.22.0.3 -  26/May/2019:09:40:51 +0000 "GET /index.php" 500my_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" 200my_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"

PAI

Dockerfile

FROM php:7.2.13-fpm-alpine3.8WORKDIR /appCOPY php.ini /usr/local/etc/php/conf.d/php.override.iniCOPY www.conf /usr/local/etc/php-fpm.d/www.confCMD ["php-fpm", "--nodaemonize"]

pai.ini

[PHP]date.timezone=UTClog_errors=Onerror_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICTdisplay_errors=Offmax_execution_time=60memory_limit=256M

www.conf

[global]daemonize=no[www]user=www-datagroup=www-datalisten=my_nginx:9000pm=dynamicpm.max_children=40pm.start_servers=2pm.min_spare_servers=2pm.max_spare_servers=4pm.max_requests=500

NGINX

Dockerfile

FROM nginx:1.15.8-alpineWORKDIR /appCOPY app.conf /etc/nginx/conf.d/default.confCOPY nginx.conf /etc/nginx/nginx.conf

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

Eu mesmo respondi isso, mas ainda voto positivo para sua solução completa: +1

Oi Bent, alguma sorte com esse problema? Estou tendo um problema semelhante, então não consigo depurar onde o aplicativo está travado

Adiei por um tempo para voltar um dia.

@ trinvh Verifique a resposta abaixo, por favor.