所有组合的docker日志与容器名称

问题描述 投票:0回答:2

所以我试图在日志文件中获取所有容器日志及其容器名称的组合输出

docker logs --tail -3 <id>
**container name** >> logst.log
文件。

linux docker docker-compose docker-machine docker-logs
2个回答
1
投票

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
或其他日志记录解决方案,并使用该实用程序来聚合和过滤日志。


0
投票

明白了。

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
是通用文件名。

© www.soinside.com 2019 - 2024. All rights reserved.