0

因此,我试图在日志文件 docker logs --tail -3容器名称>> logst.log 文件中获取所有容器日志及其容器名称的组合输出。

4

2 回答 2

0

docker logs 需要一个命令,因此您必须为每个容器运行它们。我想我可以做一些事情:

docker ps --format='{{.Names}}' | xargs -P0 -d '\n' -n1 sh -c 'docker logs "$1" | sed "s/^/$1: /"' _
  • docker ps --format='{{.Names}}'- 打印容器名称
  • xargs- 用于输入
    • -d '\n'- 对于每一行
    • -P0- 与任意数量的并行作业并行执行
      • 如果您不打算这样做,请删除此选项docker logs --follow
      • 它可能会导致问题,请考虑添加stdbuf -oLsed -u取消缓冲流
    • -n1- 将一个参数传递给 underyling 过程
    • sh -c 'script' _- 为每一行执行脚本,将行作为第一个位置参数传递
      • docker logs "$1"- 获取日志
      • sed 's/^/$1: /'- 将 docker 名称的名称添加到每个日志行

但更好的工业级解决方案是将 docker 日志转发到journalctl或其他日志记录解决方案,并使用该实用程序来聚合和过滤日志。

于 2020-08-12T18:23:52.583 回答
0

知道了。

我在docker ps -a -q --format "table {{.ID}}";做 { docker ps -a -q --format "table {{.ID}}\t{{.Names}}\n" | grep "$i" & docker logs --timestamps --tail 1 "$i"; } >> 日志.log; 完毕

logs.log 是一个通用文件名。

于 2020-08-12T18:34:21.083 回答