我无法让 php-fpm 错误日志出现在 docker std 中。到目前为止,我已经尝试了很多建议,但由于某种原因根本没有进展。我正在发布我的整个设置,以便有人可以帮助我正确的方向。我所看到的只是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
应用程序配置文件
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;
}
码头工人-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"
我尝试了什么
我彼此独立地尝试了这些/文件,而不是一次完成。
更改
/proc/self/fd/2
为/dev/stdout
//dev/stderr
forerror_log
和文件中的access.log
属性/usr/local/etc/php-fpm.d/docker.conf
。在文件底部添加了以下代码
www.conf
。
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
- 还有一些,但我忘记了。
这似乎现在起作用了。我在此示例中进行了简化,以使其易于观察。
docker-compose.yaml
PHP
Dockerfile
php.ini
www.conf
NGINX
Dockerfile
应用程序配置文件
nginx.conf