php 错误未显示在 php-apache docker 中

问题描述 投票:0回答:2

我正在尝试从我的 php docker 中获取错误日志。我发现 error.log 文件无处可去,因此修改了我的 dockerfile,如下所示:

FROM php:7.4-apache
RUN a2enmod rewrite
RUN docker-php-ext-install mysqli pdo pdo_mysql; \
    docker-php-ext-enable mysqli pdo pdo_mysql;

# Redirect apache log files to stdout, see https://github.com/moby/moby/issues/19616
RUN ln -sf /proc/1/fd/1 /var/log/apache2/access.log
RUN ln -sf /proc/1/fd/1 /var/log/apache2/error.log

产生以下文件:

# ls -l /var/log/apache2/
total 0
lrwxrwxrwx 1 root     root     12 May 11 18:25 access.log -> /proc/1/fd/1
lrwxrwxrwx 1 root     root     12 May 11 18:25 error.log -> /proc/1/fd/1
lrwxrwxrwx 1 www-data www-data 11 Nov 15 04:17 other_vhosts_access.log -> /dev/stdout

该部分现在正在工作:运行

echo "test" > /var/log/apache2/error.log
会将测试写入 docker 日志。另外,文件权限不受限制(请参阅https://stackoverflow.com/a/12566881/3519951)。

我添加了一个崩溃调用,

dfgdfga.test()
,但错误没有显示。如果我创建一个日志文件而不是重定向到 docker 输出,情况也是如此。它仍然是空的。

php docker apache error-logging
2个回答
2
投票

当我回顾这个问题时,我想通了。在这里分享,以防有帮助。

跑步

php -i | grep log
我发现了这个:

log_errors => Off => Off

在我看来,这是一个令人惊讶的默认设置,但足以解释日志的缺失。因此,我创建了一个小的 ini 文件(受本文启发),将其直接通过管道传输到 docker 日志:

; log PHP errors to a file. E_ALL=32767
log_errors = on
error_reporting = 32767
error_log = /proc/1/fd/1

并将其复制到 dockerfile 中,如下所示:

COPY logging.ini /usr/local/etc/php/conf.d/logging.ini

0
投票

我在我的 php8-apache docker 容器中运行了这个,它为我修复了它。我可能应该先备份生产 php.ini。

cp“$PHP_INI_DIR/php.ini-development”“$PHP_INI_DIR/php.ini”

如果我正在构建一个新的,我会将其放入我的 DockerFile 中,并将 php.ini 复制到 php.ini-生产,然后再将开发版本复制到位。

在此更改之后,我的所有错误都以典型的 docker 方式出现。

© www.soinside.com 2019 - 2024. All rights reserved.