微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Docker容器中使用Apache,并且什么也不写入磁盘所有日志到STDIO / STDERR?

我在Docker容器中运行Apache2,并且不想向磁盘写入任何内容,将日志写入stdout和stderr。 我已经看到了一些不同的方法来做到这一点(Supervisord和stdout / stderr,Apache访问日志到标准输出),但这些看起来像黑客。 有没有办法认这样做?

要清楚的是,我不想拖尾日志,因为这会导致事情被写入容器中的磁盘。

Docker Hub( https://hub.docker.com/_/httpd/ )中签入的“官方”版本仍然写入磁盘。

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

我被黑客攻击了吗?

压缩HTML,CSS和JS与mod_deflate和mod_gzip禁用的最佳方法

Mod重写:用 – (连字符)replace所有_(下划线)

语言参数用mod_rewrite重写

Apache没有正确提供.mp4文件显示文件内容而不是下载提示

另一件事 – 理想情况下,我真的很喜欢做这个没有另一个附加。 Nginx可以做到这一点。

尾随斜杠问题

.htaccess密码保护文件夹转到404页面

在Eclipse中安装Apache common lang 2.5

.htaccess:LogLevel不允许在这里

Apache RewriteMap并隐藏URL

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

ln -sf /dev/stdout /path/to/access.log ln -sf /dev/stderr /path/to/error.log

来自Docker Hub的vanilla httpd容器的入口命令可以做成类似的东西

ln -sf /dev/stdout /path/to/access.log && ln -sf /dev/stderr /path/to/error.log && /path/to/httpd

根据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

您可以直接将ErrorLog发送到syslog,并且可以将任何CustomLog(访问日志)发送到从stdin读取的任何可执行文件。 有日志聚合工具,或者可以再次使用系统日志w /例如/ usr / bin / logger。

你可以尝试使用dockerize工具。 有了这个,你可以包装httpd-foreground命令并将它的日志文件重定向到stdout / stderr(不知道httpd日志文件路径,只需根据需要调整它们即可):

CMD ["dockerize","-stdout","/var/log/httpd.log","-stderr","/var/log/httpd.err","httpd-foreground"]

除此之外,您还可以通过指定syslog 日志驱动程序并将其重定向到docker主机上的/var/log/syslog日志文件获取容器stdout / stderr:

docker run -d --log-driver=syslog ...

我调整了配置,从httpd的Dockerfile配方,他们使用sed来调整配置,更改ErrorLog和CustomLog,如下所示:

sed -ri ' s!^(s*CustomLog)s+S+!1 /proc/self/fd/1!g; s!^(s*ErrorLog)s+S+!1 /proc/self/fd/2!g; ' /usr/local/apache2/conf/httpd.conf

请参阅https://github.com/docker-library/httpd/blob/master/2.4/Dockerfile (在文件末尾)

我知道这是一个古老的问题,但我今天有这个需要。

Alpine 3.6上 , httpd.conf的以下指令正在工作:

Errorlog /dev/stderr Transferlog /dev/stdout

我把它们添加到我的容器中:

FROM alpine:3.6 RUN apk --update add apache2 RUN sed -i -r 's@Errorlog .*@Errorlog /dev/stderr@i' /etc/apache2/httpd.conf RUN echo "Transferlog /dev/stdout" >> /etc/apache2/httpd.conf ...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐