PHP docker 이미지에서 감독자를 사용할 때 권한 문제가 발생합니다.

PHP docker 이미지에서 감독자를 사용할 때 권한 문제가 발생합니다.

내 응용 프로그램을 빌드하기 위해 공식 PHP 도커 이미지를 사용하고 있습니다.

사례 1:루트 사용자를 사용하여 감독자를 실행하고 www-data 사용자를 사용하여 php-fpm 하위 프로세스를 실행할 때. 항상 다음과 같은 오류 로그가 나타납니다.

FPM initialization failed
failed to open error_log (/proc/self/fd/2): Permission denied (13)

내 감독자 구성:

[unix_http_server]
file=/run/supervisord.sock  ; the path to the socket file

[supervisord]
logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; supervisord pidfile; default supervisord.pid

nodaemon=true ; start in foreground if true; default false

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///run/supervisord.sock ; use a unix:// URL for a unix socket

[include]
files = /etc/supervisor.d/*.conf

내 하위 프로세스 php-fpm 구성:

[program:php-fpm]
process_name=%(program_name)s
command=php-fpm
user=www-data
autostart=true
autorestart=true
redirect_stderr=false
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

하위 프로세스 php-fpm의 사용자를 www-data에서 루트로 변경하면 완벽하게 실행됩니다.

사례 2:www-data 사용자로 Supervisord를 실행하고(구성 파일을 일부 변경하여 실행) www-data 사용자로 하위 프로세스 php-fpm을 실행하면 모든 것이 잘 작동합니다.

내 감독자 구성:

[unix_http_server]
file=/app/supervisord.sock  ; the path to the socket file

[supervisord]
logfile=/app/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/app/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=true ; start in foreground if true; default false
user=www-data                     ; setuid to this UNIX account at startup; recommended if root


[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///run/supervisord.sock ; use a unix:// URL for a unix socket

[include]
files = /etc/supervisor.d/*.conf

내 하위 프로세스 php-fpm 구성:

[program:php-fpm]
process_name=%(program_name)s
command=php-fpm
user=www-data
autostart=true
autorestart=true
redirect_stderr=false
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

이 두 가지 상황의 차이점은 무엇입니까? 감사합니다!

관련 정보