Docker中的Apache:如何“ access.log”?


17

我刚刚开始使用Docker和Richt,现在我想弄清楚如何设置我的第一个Dockerized Apache 2 / PHP环境。到目前为止,我一直在使用完整的Linux VM,在其中我使用了将日志文件写入/ var / log / apache2的日志文件,然后每天使用“ logrotate”跳至一个新文件。

日志文件主要用于即时错误检测(即登录服务器,并较少使用它来打开当前的access.log和error.log文件)和fail2ban。

如果我是正确的,那在Docker环境中是不可行的-主要是因为您通常无法登录到容器来查看日志。如果删除容器,日志也会丢失。

因此:在这种情况下,使用/模拟/替换access.log / error.log的最常用方法是什么?生产和开发环境的常见解决方案是什么?

到目前为止,我的想法包括使用NFS共享(速度慢,如果不小心可能会导致文件名冲突)和logstash(不确定是否值得这样做,并且对于较小的站点甚至开发环境是否可行?),但是我敢肯定,聪明的人有更好的解决方案?

不知道它是否有所作为,但是目前我将Docker映像基于php:5.6-apache

Answers:


13

您仍然可以使用docker exec -it <your container name> /bin/bash命令进入容器并完成常规工作。或者,您可以更改/bin/bash为命令或命令脚本.sh来执行它。

为了使文件脱离容器使用 docker cp <container name:/path/to/file> </your local machine/path/>

对于日常工作,您可以使用croncronjob这些命令。我强烈建议您为常用的docker命令添加别名。这样我可以通过几个键愉快地使用docker。

docker logs <container name/id>命令用于从docker映像执行中查看日志。它显示重定向输出到stdout。


另外,这docker attach <container name>是从容器查看stdout的好方法。但是请注意,如果您执行ctrl + d或ctrl + c,它将终止(sigkill)您正在进行的任务。因此,您必须使用转义键正确分离它ctrl+p+q。如果您只想封装到您的容器中,我更喜欢使用exec上面的命令。
Fony Lew

6

如何将访问和错误日​​志写入stderr和stdout?

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

https://gist.github.com/afolarin/a2ac14231d9079920864

运行ln -sf / dev / stdout /var/log/nginx/access.log

运行ln -sf / dev / stderr /var/log/nginx/error.log

但是,使用ELK进行集中式日志记录可以实现更主动的监视。但是您已经自己想到了那个人。


1

到目前为止,我发现“ docker logs ”被多次提及。

我绝对是Docker newb,因此可能可以解决我的问题-但到目前为止,我还没有完全理解该命令背后的概念。

Docker似乎将所有stdout输出保存在/ var / lib / docker / containers / 中的JSON文件中,这使我有机会通过logs命令访问它们。

到目前为止,我不确定如何实际使用输出。


1

提出问题时,也许此功能不存在,但是使用run的-v参数,您可以将主机上的目录安装到容器中的目录上。

docker run -v [host_dir]:[container_dir]

这样,当删除容器时,日志(或其他)文件将保留下来,您可以访问文件,就像将apache安装在主机上而不是容器中一样。

或者,您可以以某种方式将修改后的日志文件推送到中央位置。Kibana堆栈使用filebeat来实现此目的,但是如果您不关心堆栈的其余部分,则应该可以独立运行filebeat。


1
Docker三年前已绑定绑定卷。
womble

0
root@my_docker:~ # ls -l /var/log/apache2/
total 0
lrwxrwxrwx 1 root root 11 Jul 17 04:55 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 Jul 17 04:55 error.log -> /dev/stderr
lrwxrwxrwx 1 root root 11 Jul 17 04:55 other_vhosts_access.log -> /dev/stdout
root@my_docker:~ #

我选择的docker映像只是将所有* .log文件链接到/ dev / stdout和/ dev / stderr,因此我无法读取它们。

删除文件并重新启动apache之后,我可以从docker中的/ var / log /获取日志。

docker-compose exec apache bash -c "tail -f /var/log/apache2/*.log"

0

在apache配置文件中,您可以添加:
CustomLog / dev / stdout
ErrorLog / dev / stderr

并使用以下命令查看日志:
docker logs container_id

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.