Logging
無法將 php7.3 fpm-alpine 錯誤日誌發送到 docker 容器中的 std
我無法讓 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
- 還有一些,但我忘記了。
這似乎現在起作用了。我在此範例中進行了簡化,以使其易於觀察。
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
www.conf
[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; }