因此,我试图在日志文件 docker logs --tail -3和 容器名称>> logst.log 文件中获取所有容器日志及其容器名称的组合输出。
问问题
773 次
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 -oL
和sed -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 回答