在 php docker 镜像中使用supervisor时出现权限问题

在 php docker 镜像中使用supervisor时出现权限问题

我正在使用官方 php docker 映像构建我的应用程序。

情况1:当我使用root用户运行supervisord并使用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 更改为 root,它会完美运行

案例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

这2种情况有什么区别?谢谢你!

相关内容