将docker-compose日志保存到文件中

我有我的生成服务器上运行的unit testing,并希望捕获日志结果分析失败时。 我还没有find一种方法将docker-compose logs的输出redirect到一个文件,或者find日志文件本身实际存在的位置。

我想要相当于:

 docker-compose logs > logs.txt 

编辑 – 澄清:

我所有的docker集装箱产生有用的日志,这是一个手工运行的docker-compose logs显示。 我想脚本这个过程将这些相同的日志保存到我的生成服务器上的一个文件。 基本上, docker-compose logs的输出保存到一个文件,然而docker-compose logs永远不会退出。

默认情况下,docker使用json-file驱动程序来logging您的容器日志,并可以在以下位置find日志的原始json输出:

 /var/lib/docker/containers/[container-id]/[container-id]-json.log 

您可以运行以下命令获取此位置:

 docker inspect --format='{{.LogPath}}' [container-id or container-name] 

当你运行docker-compose logs [service-name]docker-compose会附加到你引用的服务(容器),而LogPrinter对象将输出上述文件的内容,但是格式化使它们更容易阅读。

相关文档: https : //docs.docker.com/compose/compose-file/#logging

我不知道你在努力达到什么目的。 你想重现吗?

 docker-compose logs > logs.txt 

在撰写文件中作为指令? 或者,您的问题是redirect不“捕捉”整个输出?

在以后,你可以这样做:

 docker-compose logs --no-color >& logs.txt 

要么

 docker-compose logs --no-color |& tee logs.txt 

都可以在terminal上看到日志,并同时将其转储到文件中。

在以后的版本docker-compose 1.7.x +中,它是固定的。 见https://github.com/docker/compose/issues/2227&https://github.com/docker/compose/releases/tag/1.7.0

在此之前,还有另一种方法来实现它,接受答案的答案是直接访问主机文件,这可能不适用于远程/安全情况。

下面我们可以从docker-compose ps命令中获取容器名称,并让docker logs命令循环

 docker-compose ps | tail -n +3 | awk '{print $1}' | xargs -n1 docker logs