Объяснение о супервизоре и хвосте по ошибке Apache ..log

При создании контейнера Docker, чтобы иметь как apache2 error.log и хвост через docker logs -f <my_container> Я использую контейнер, который запускает супервизор в качестве точки входа с этими конфигурациями:

 [supervisord] nodaemon = true environment = PLACEHOLDER=true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:apache] command=apache2ctl -DFOREGROUND autostart=true autorestart=true startretries=1 startsecs=1 stderr_logfile=/var/log/apache2/error.log stdout_logfile=/var/log/apache2/access.log user=root killasgroup=true stopasgroup=true [program:apache2-error] command= tail -f /var/log/apache2/error.log autostart = true autorestart = true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:apache2-access] command= tail -f /var/log/apache2/access.log autostart = true autorestart = true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 

это работает отлично, но я не понимаю, почему это не работает, если я заменил сессию [program:apache] следующим образом:

 [program:apache] command=apache2ctl -DFOREGROUND autostart=true autorestart=true startretries=1 startsecs=1 user=root killasgroup=true stopasgroup=true 

То есть: без явного задания файла журнала stderr и stdout команда docker logs -f <my_container> не работает, но внутри контейнера tail -f /var/logs/apache2/access.log и tail -f /var/logs/apache2/error.log хорошо работает.

Кто-то может объяснить мне, почему docker logs -f <my_container> supervisor и docker logs -f <my_container> имеют две разные работы из-за этих изменений конфигурации?

благодаря

Супервизор может «видеть» stdout apache2 и записывать его в файл, указанный вами с помощью stdout_file . Дело в том, что apache2 не записывает журнал доступа в stdout, он записывает его в файл в / var / log / apache2.

Итак, то, что вы видите в docker logs -f – это хвост, который супервизор делает с файлом, который вы предоставили в stdout_file и супервизор stdout_file его на свой собственный stdout как вы настроили в [supervosord] .

Поэтому, когда вы удаляете конфигурацию файла журнала apache2 из супервизора, такой пересылки нет; и apache2 продолжает запись в тот же файл, что и раньше.

Итак, что вам нужно сделать, это сообщить Apache, чтобы он записывал свой журнал доступа в / dev / stdout вместо файла на диске. Вы можете сделать это в конфигурации виртуального хоста Apache.

То же самое для stderr .