Ich habe php-fpm in einem Docker-Container und Dockerfile
bearbeite die fpm-Konfigurationsdatei ( /etc/php5/fpm/pool.d/www.conf
), um Zugriffsprotokolle /var/log/fpm-access.log
und Fehlerprotokolle einzurichten /var/log/fpm-php.www.log
:
# Do some php-fpm config
# Redirect worker stdout and stderr into main error log
# Activate the fpm access log
# Enable display errors
# Enable the error log
RUN sed -i '/^;catch_workers_output/ccatch_workers_output = yes' /etc/php5/fpm/pool.d/www.conf && \
sed -i '/^;access.log/caccess.log = /var/log/fpm-access.log' /etc/php5/fpm/pool.d/www.conf && \
sed -i '/^;php_flag\[display_errors\]/cphp_flag[display_errors] = off' /etc/php5/fpm/pool.d/www.conf && \
sed -i '/^;php_admin_value\[error_log\]/cphp_admin_value[error_log] = /var/log/fpm-php.www.log' /etc/php5/fpm/pool.d/www.conf && \
sed -i '/^;php_admin_flag\[log_errors\]/cphp_admin_flag[log_errors] = on' /etc/php5/fpm/pool.d/www.conf
Das funktioniert gut - ich kann eine Shell in den Container bekommen, um die Protokolle zu sehen. Aber ... es ist keine bewährte Methode.
Das Problem ist, wenn ich versuche, den Docker Log Collector zu verwenden. Ich benötige php-fpm, um mich bei stdout oder stderr anzumelden, damit Docker sie erfassen und dem docker logs
Befehl zur Verfügung stellen kann.
Ich habe versucht, dies in Dockerfile
(eine Idee, die ich aus dem offiziellen Nginx Docker-Image kopiert habe ):
# Redirect fpm logs to stdout and stderr so they are forwarded to the docker log collector
RUN ln -sf /dev/stdout /var/log/fpm-access.log && \
ln -sf /dev/stderr /var/log/fpm-php.www.log
Dies funktioniert nicht. Es werden keine Zugriffsprotokolle angezeigt. docker logs
Ich versuche herauszufinden, warum. Hat es jemand anderes, der fpm in docker verwendet, geschafft, die Protokollierung für den Docker-Protokollsammler zum Laufen zu bringen?
/dev/stdin ~ /dev/fd/0 ~ /proc/self/fd/0
und/dev/stdout
und/dev/stderr
Varianten geben. Es könnte einfacher sein, sich an die Verwendung zu erinnern/dev/stdin
.