所以我试图在日志文件中获取所有容器日志及其容器名称的组合输出
docker logs --tail -3 <id>
与 **container name** >> logst.log
文件。
docker log 需要一个命令,因此您必须为每个容器运行它们。我想我可以一起做点什么:
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
- 将一个参数传递给底层进程sh -c 'script' _
- 为每一行执行脚本,并将行作为第一个位置参数传递
docker logs "$1"
- 获取日志sed 's/^/$1: /'
- 将 docker 名称添加到每个日志行但是更好的工业级解决方案是将 docker 日志转发到
journalctl
或其他日志记录解决方案,并使用该实用程序来聚合和过滤日志。
明白了。
for i in `docker ps -a -q --format "table {{.ID}}"`; do { docker ps -a -q --format "table {{.ID}}\t{{.Names}}\n" | grep "$i" & docker logs --timestamps --tail 1 "$i"; } >> logs.log; done
logs.log
是通用文件名。