如何将docker日志redirect到单个文件?

我想将我的docker容器的所有日志redirect到单个日志文件来分析它们。 我试过了

docker logs container > /tmp/stdout.log 2>/tmp/stderr.log 

但是这给login在两个不同的文件。 我已经尝试过了

 docker logs container > /tmp/stdout.log 

但它没有工作。

不需要redirect日志。

Docker默认将日志存储到一个日志文件。 要检查日志文件path运行命令:

 docker inspect --format='{{.LogPath}}' containername /var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log 

打开该日志文件并分析。

如果您redirect日志,那么您将只能在redirect之前获取日志。 你将无法看到活动日志。

编辑:

要查看实时日志,您可以在命令下运行

 tail -f `docker inspect --format='{{.LogPath}}' containername` 

注意:

这个日志文件/var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log将被创build,只有当docker生成日志,如果没有日志,那么这个文件将不会在那里。 它是类似的,如果我们运行命令docker logs containername ,它什么都不返回。 在这种情况下,这个文件将不可用。

这个选项怎么样:

docker logs contaiername >& logs/myFile.log

我希望这可以帮助别人。

对我来说非常有用

这对我行得通:

docker logs <options> containername >& logs/myFile.log

假设你有多个容器,并且你想把日志聚合成一个文件,你需要使用一些日志聚合器,比如fluentd。 作为docker容器的日志驱动程序,支持fluentd。

所以在docker-compose中,你需要定义日志驱动

  service1: image: webapp:0.0.1 logging: driver: "fluentd" options: tag: service1 service2: image: myapp:0.0.1 logging: driver: "fluentd" options: tag: service2 

第二步是更新fluentd conf以迎合服务1和服务2的日志

  <match service1> @type copy <store> @type file path /fluentd/log/service/service.*.log time_slice_format %Y%m%d time_slice_wait 10m time_format %Y%m%dT%H%M%S%z </store> </match> <match service2> @type copy <store> @type file path /fluentd/log/service/service.*.log time_slice_format %Y%m%d time_slice_wait 10m time_format %Y%m%dT%H%M%S% </store> </match> 

在这个configuration中,我们要求将日志写入到这个path的单个文件中
/fluentd/log/service/service.*.log

第三步是运行定制的fluentd,它将开始将日志写入文件。

以下是分步说明的链接

比特长,但是正确的方式,因为你得到更多的控制日志文件的path等,它也适用于Docker Swarm。