如何在Docker Container中使用Apache并且不向磁盘写入任何内容(所有日志都记录到STDIO/STDERR)?

aro*_*ick 10 apache docker kubernetes

我在docker容器中运行Apache2并且想要不写入磁盘,将日志写入stdout和stderr.我已经看到了几种不同的方法(Supervisord和stdout/stderr,Apache访问日志到stdout),但这些看起来像黑客.默认情况下没有办法做到这一点吗?

要清楚,我不想尾随日志,因为这会导致事物被写入容器中的磁盘.

登录到Docker Hub(https://hub.docker.com/_/httpd/)的"官方"版本仍然写入磁盘.

另外,在尝试滚动日志时,我需要做些什么来阻止Apache失败?

另一件事 - 理想情况下,我真的很想在没有其他附加功能的情况下这样做.nginx可以做到这一点.

Ale*_*son 7

我并不认为这根本不会破坏httpd的日志记录(例如,如果它试图在文件中搜索),但你可以设置从日志路径到/ dev/stdout和/ dev/stderr的符号链接,就像所以:

ln -sf /dev/stdout /path/to/access.log
ln -sf /dev/stderr /path/to/error.log
Run Code Online (Sandbox Code Playgroud)

可以使用Docker Hub对vanilla httpd容器的入口命令

ln -sf /dev/stdout /path/to/access.log && ln -sf /dev/stderr /path/to/error.log && /path/to/httpd
Run Code Online (Sandbox Code Playgroud)


aro*_*ick 5

根据apache邮件列表,您可以直接写入/ dev/stdio(在类似Unix的系统上),因为它只是一个常规的OL'文件句柄.简单!粘贴...

最有效的答案取决于您的操作系统.如果您使用的是UNIX系统,它提供/ dev/stdout和/ dev/stderr(或者可能是/ dev/fd/1和/ dev/fd/2),那么请使用这些文件名.如果这不是一个选项,请使用管道输出功能.例如,从我的配置:

CustomLog"|/usr/sbin/rotatelogs -c -f -l -L /private/var/log/apache2/test-access.log /private/var/log/apache2/test-access.log.%Y-% m-%d 86400"krader_custom ErrorLog"|/usr/sbin/rotatelogs -c -f -l -L /private/var/log/apache2/test-error.log/private/var/log/apache2/test-error .log.%Y-%m-%d 86400"

显然你会想要在上面的例子中用/ usr/sbin/rotatelogs替换另一个程序,它将数据写入你想要的位置.

https://mail-archives.apache.org/mod_mbox/httpd-users/201508.mbox/%3CCABx2=D-wdd8FYLkHMqiNOKmOaNYb-tAOB-AsSEf2p=ctd6sMdg@mail.gmail.com%3E