没有来自Docker容器的php-fpm错误日志

sys*_*t0m 6 php apache docker docker-compose

在docker-compose中使用apache + php-fpm容器,我无法使php-fpm容器显示任何错误。

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
Run Code Online (Sandbox Code Playgroud)

php-fpm Dockerfile:

FROM php:5.6-fpm 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

docker-compose日志仅显示php-fpm访问日志,没有错误日志。

尝试了帖子中提出的所有解决方案,并建议它们尽可能重复:PHP-FPM不会写到错误日志中 没有一个对我有用,请在下面检查我的评论。

mrb*_*tta 2

努力工作几个小时才能完成这项工作。

在文件中docker-compose.yml我安装了我的日志(所以它们持续存在)

        volumes:
        - ./phpSettings.conf:/usr/local/etc/php-fpm.d/zzz-phpSettings.conf
        - ./logs/php-error.log:/var/log/error.log
        - ./logs/php-access.log:/var/log/access.log
Run Code Online (Sandbox Code Playgroud)

在文件中phpSettings.conf我有这个:

[www]
user = www-data
group = www-data
listen = 0.0.0.0:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

catch_workers_output = yes
php_admin_flag[log_errors] = on
php_admin_flag[display_errors] = off
php_admin_value[error_reporting] = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED
php_admin_value[error_log] = /var/log/error.log
access.log = /var/log/access.log
php_value[memory_limit] = 512M
php_value[post_max_size] = 24M
php_value[upload_max_filesize] = 24M
Run Code Online (Sandbox Code Playgroud)

在启动 docker 之前确保已挂载的日志文件存在。

诀窍似乎是命名我的设置,zzz-phpSettings.conf因此是最后一个加载的设置。我使用完全相同的设置覆盖默认的 docker php 映像 www.conf 设置(除了监听 0.0.0.0:9000)。

在这个 php-fpm+Nginx 设置中,我设法将 nginx(错误/访问)日志记录到自己的位置 + php-fpm 错误/访问日志也记录到自己的位置,所以 loggins 看起来非常好。