Я запускаю супервизора без полномочий root внутри Docker, моя конфигурация:
[supervisord]
nodaemon=true
logfile=/dev/null
logfile_maxbytes=0
Когда я запускаю контейнер, я получаю сообщение об ошибке
PermissionError: [Errno 13] Отказано в доступе: '/var/log/supervisor/migrate-stdout---supervisor-jxo2nr9k.log'
Потому что нет разрешения писать, что правильно. Я хочу образ только для чтения, я не могу ничего записать на диск.
Можно ли запретить супервизору записывать файлы? Или лучше перенаправить на stdout/err?
Вам необходимо обновить конфигурацию отдельных программ, управляемых Supervisor, чтобы также перенаправить их стандартный вывод и стандартный вывод на /dev/stdout и /dev/stderr соответственно.
например, если у вас есть такая конфигурация:
[program:migrate]
command=your-command
stdout_logfile=/var/log/supervisor/migrate-stdout.log
stderr_logfile=/var/log/supervisor/migrate-stderr.log
то вы должны обновить это:
[program:migrate]
command=your-command
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
так что в итоге:
[supervisord]
nodaemon=true
logfile=/dev/null
logfile_maxbytes=0
loglevel=info
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:migrate]
command=your-command
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
Это не работает в файловой системе только для чтения, я получил ошибку: PermissionError: [Errno 13] Отказано в доступе: '/var/log/supervisor/migrate-stdout ---supervisor-qupxrtld.log'