Docker 컨테이너에서 실행할 때 PHP-FPM이 stdout / stderr에 로그하는 방법


18

도커 컨테이너에 php-fpm이 있고 액세스 로그를 설정 하고 오류 로그를 설정 Dockerfile하려면 fpm 구성 파일 ( /etc/php5/fpm/pool.d/www.conf)을 편집하십시오 ./var/log/fpm-access.log/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

이것은 잘 작동합니다-컨테이너에 쉘을 가져 와서 로그를 볼 수 있습니다. 그러나 ... 그것은 최선의 방법이 아닙니다.

도커 로그 수집기 를 사용하려고 할 때 문제가 발생합니다 .docker 가 stdout 또는 stderr에 기록하려면 php-fpm이 필요합니다 docker logs.

나는 이것을 시도했다 Dockerfile( 공식 nginx docker image 에서 복사 한 아이디어 ) :

# 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

이것은 작동하지 않습니다-액세스 로그가 표시되지 않습니다. docker logs이유를 알아 내려고 노력하고 있습니까? 도커에서 fpm을 사용하는 다른 사람이 도커 로그 수집기에 로깅 작업을 수행 했습니까?

답변:


24

좋아, 이것을하는 방법은 오류와 액세스 로그를 다음 주소로 보내는 것입니다.

/proc/self/fd/2

php5-fpm.log추가 :

access.log = /proc/self/fd/2
error_log = /proc/self/fd/2

그것은 거기까지 가능 /dev/stdin ~ /dev/fd/0 ~ /proc/self/fd/0하고 /dev/stdout/dev/stderr변형. 기억하는 것이 더 쉬울 수 있습니다 /dev/stdin.
CMCDragonkai

1
답변에 오류가 있습니다- "access.log"가 아닌 "access_log"
rfay

2
것 같습니다 access.log: github.com/docker-library/php/blob/...
CommandZ

13

최신 버전의 공식 PHP fpm 도커 이미지에 대한 구운 fpm 구성 은 표준 스트림에 기록됩니다.

error_log = /proc/self/fd/2

...

; if we send this to /proc/self/fd/1, it never appears
access.log = /proc/self/fd/2

고마워요. 흥미 롭습니다. 나는 지금 공식적인 이미지가 있다는 것을 몰랐다
Tom

1
어떤 도커 이미지를 참조하고 있습니까? php : 7-fpm을 실행했는데에 오류를 기록하지 않는 것 같습니다 stderr.
데릭

1

PHP-FPM 로그는 STDERR에 나타납니다 - 당신이 심볼릭 링크 수 fpm.log/dev/stderr원하는 경우.

ln -sf /dev/stderr /var/log/fpm-access.log
ln -sf /dev/stderr /var/log/fpm-error.log

4
이 솔루션은 질문에 주어졌으며 asker는 작동하지 않는다고 말했습니다. 어쩌면 Dockerfile에 어떻게로드 할 수 있는지 올바르게 지정하거나 컨테이너에서 수행 할 수있는 다른 진단 방법을 지정할 수 있습니까?
Andrew Domaszek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.