Docker中以非root运行Supervisor的日志权限问题及方案问询
在Docker只读镜像中以非root用户运行Supervisor的日志配置方案
你的问题出在:当前仅配置了supervisord自身的日志输出到/dev/null,但子进程的日志默认会写入/var/log/supervisor目录,而只读镜像下该目录没有写入权限,因此触发权限错误。
可以通过以下两种方式解决:
1. 完全禁用所有日志输出
修改supervisord.conf,将supervisord自身及所有子进程的日志都指向/dev/null,同时把pid文件放到可写的临时目录:
[supervisord] nodaemon=true logfile=/dev/null logfile_maxbytes=0 pidfile=/tmp/supervisord.pid # 只读镜像下/var/run通常不可写,改用tmp目录 # 针对每个子进程配置 [program:migrate] command=你的实际迁移命令 stdout_logfile=/dev/null stderr_logfile=/dev/null
2. 将所有日志重定向到stdout/stderr
如果需要保留日志输出以便Docker捕获(通过docker logs查看),可以将日志指向系统标准输出/错误流:
[supervisord] nodaemon=true logfile=/dev/null logfile_maxbytes=0 pidfile=/tmp/supervisord.pid # 针对每个子进程配置 [program:migrate] command=你的实际迁移命令 stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 # 禁用日志轮转(标准流无需轮转) stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0
注意:所有自定义的[program:*]段都需要单独配置日志路径,否则会使用默认的/var/log/supervisor目录,再次触发权限问题。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

