Apache访问/错误日志未填充到具有Supervisor D的Docker容器中


Apache Access/Error Logs Not Populated in Docker Container with Supervisor D

我在Ubuntu容器中运行Apache 2.4.7,并且没有填充Apache访问/错误日志。这是Dockefile:

FROM ubuntu:14.04
MAINTAINER me@mysite.com
RUN apt-get update
RUN apt-get install -y apache2 supervisor php5 php5-mysql php5-cli
RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/log/supervisor
RUN a2enmod rewrite
RUN a2enmod ssl
RUN a2enmod headers
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY pickle /etc/logrotate.d/pickle
COPY pickle_socket /etc/logrotate.d/pickle_socket
COPY pickleudp /etc/logrotate.d/pickleudp
ADD 000-default.conf /etc/apache2/sites-enabled/
ADD default-ssl.conf /etc/apache2/sites-enabled/
ADD apache2.conf /etc/apache2/
ADD www-server/ /www-server/
EXPOSE 80 443 
CMD ["/usr/bin/supervisord"]

SupervidorD配置文件。其他服务在此启动,但不相关:

[supervisord]
nodaemon=true
[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"

最后,这里是用于Apache设置和写入日志文件的000-default.conf:

<VirtualHost *:80>
    DocumentRoot /www-server/
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<Directory /www-server/>
    # prevent potential clickjacking
    Header always append X-Frame-Options SAMEORIGIN
    # allow .htaccess overrides to work
    AllowOverride All
    DirectoryIndex login.html index.html index.php
</Directory>

我已经确认在/etc/apache2/envvars-export APACHE_LOG_DIR=/var/log/apache2$SUFFIX 中设置了适当的指令

经过大量的研究,阅读错误报告等,我并不比刚开始的时候更接近于解决这个问题。我是否做了一些错误的事情来填充日志文件?或者,在Docker容器中运行Apache时,我必须注意一些事情吗?

经过一些挖掘,我在/var/log/supervisor/下的Docker容器内找到了访问/错误日志,根据Supervisor的文档,这是所有此类子进程日志的典型位置:

默认情况下,会捕获supervisor派生的子进程的stdout,以便重新显示给supervisorctl和其他客户端的用户。如果在配置文件的[program:x]、[fcgi program:x]或[eventlistener:x]部分中没有执行特定的日志文件相关配置,则以下情况为真:

  • supervisord将把子进程的stdoutstderr输出捕获到临时文件中。每个流都被捕获到一个单独的文件中。这被称为AUTO日志模式
  • AUTO日志文件会自动命名,并放置在配置文件的supervisord部分配置为childlogdir的目录中。-每个AUTO日志文件的大小受程序段的{streamname}_logfile_maxbytes值的限制(其中{streamname}是"stdout"或"stderr")。当它达到这个数字时,它会根据{streamname}_logfile_backups进行旋转(就像活动日志一样)