我无法让 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
閣下網站
[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;
}
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"
我尝试过
我独立地尝试了这些文件,而不是一次性全部尝试。
将文件中的和属性更改
/proc/self/fd/2
为/dev/stdout
/ 。/dev/stderr
error_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
- 还有一些,但我记不清了。
答案1
现在看来这可行了。我在此示例中进行了简化,以便于观察。
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
閣下網站
[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
应用程序配置文件
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;
}