智能
助手
最大化  清空记录 停止  历史记录
翻译选中文本
选中一段文本后进行翻译
名词解释
选中一段文本后进行名词解释
知识图谱生成
通过图谱展示知识信息
登录用户在知识浏览页面可用
答案生成
AI自动回答一个问答功能中的问题
登录用户在问答浏览页面,且问题开放回答中可用
知识摘要
自动为当前知识生成摘要
知识浏览页面可用
知识问答
针对当前知识进行智能问答
知识浏览面可用
   60  
查询码: 00000214
9 Docker 日志输出到终端案例大全
作者: 文艺范儿 于 2025年12月22日 发布在分类 / Docker & K8S / docker基础 ,于 2025年12月22日 编辑
docker

9. Docker 日志输出到终端案例大全

Docker 提供了多种方式将容器日志输出到终端,从简单的查看实时日志到复杂的日志聚合方案。下面详细介绍各种方法和实际案例。


9.1 基础日志查看命令

9.1.1 docker logs - 查看容器日志

# 基本用法:查看容器日志
docker logs container_name_or_id

# 实时跟踪日志(类似 tail -f)
docker logs -f container_name_or_id

# 显示最近的 N 行日志
docker logs --tail 100 container_name_or_id

# 显示时间戳
docker logs -t container_name_or_id

# 组合使用:实时跟踪并显示时间戳
docker logs -ft container_name_or_id

# 查看指定时间范围的日志
docker logs --since 2024-01-15T10:00:00 --until 2024-01-15T11:00:00 container_name

9.1.2 实际案例

# 运行一个测试容器
docker run -d --name test-nginx nginx:alpine

# 查看实时日志
docker logs -f test-nginx

# 查看最近50行日志(带时间戳)
docker logs --tail 50 -t test-nginx

# 查看过去10分钟的日志
docker logs --since 10m test-nginx

9.2 应用日志直接输出到终端

9.2.1 案例1:Nginx 日志输出到终端

FROM nginx:alpine

# 修改 Nginx 配置,将日志输出到标准输出和标准错误
RUN ln -sf /dev/stdout /var/log/nginx/access.log && \
    ln -sf /dev/stderr /var/log/nginx/error.log

CMD ["nginx", "-g", "daemon off;"]

构建和运行:

docker build -t nginx-stdout -f Dockerfile .
docker run -d --name nginx-test nginx-stdout
docker logs -f nginx-test

9.2.2 案例2:Node.js 应用日志输出

略。。。

9.3 结构化日志输出案例

9.3.1 案例3:Python 应用 JSON 格式日志
略。。。

9.4 自定义日志驱动的终端输出

9.4.1 使用 JSON 文件驱动并实时输出

# 运行容器并配置日志驱动
docker run -d \
  --name custom-log-app \
  --log-driver=json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  --log-opt labels=environment \
  --log-opt env=APP_ENV \
  -l environment=production \
  -e APP_ENV=production \
  nginx:alpine

# 实时查看 JSON 格式日志
docker logs -f custom-log-app

9.4.2 使用 fluentd 日志驱动(需要 Fluentd 服务)

# 如果有 Fluentd 服务运行
docker run -d \
  --name fluentd-log-app \
  --log-driver=fluentd \
  --log-opt fluentd-address=localhost:24224 \
  --log-opt tag="docker.{{.Name}}" \
  nginx:alpine

9.5 日志过滤和分析

9.5.1 使用 grep 过滤日志

# 过滤包含特定关键词的日志
docker logs container_name | grep "ERROR"

# 过滤并显示行号
docker logs container_name | grep -n "404"

# 使用正则表达式过滤
docker logs container_name | grep -E "(started|stopped|error)"

# 统计错误数量
docker logs container_name | grep "ERROR" | wc -l

9.5.2 使用 awk 分析日志

# 提取时间戳和日志级别
docker logs container_name | awk '{print $1, $2, $4}'

# 统计不同级别的日志数量
docker logs container_name | awk '{print $4}' | sort | uniq -c

# 提取特定时间段的日志
docker logs container_name | awk '/2024-01-15 10:/{print}'

9.5.3 实时监控特定模式

# 实时监控错误日志
docker logs -f container_name | grep --line-buffered "ERROR"

# 实时监控并高亮显示
docker logs -f container_name | grep --color=always -E "(ERROR|WARN|SUCCESS)"

# 使用 multitail 监控多个容器(需要安装 multitail)
multitail -cS docker -l "docker logs -f container1" -l "docker logs -f container2"

9.6 实用的日志查看脚本

9.6.1 日志监控脚本

monitor-logs.sh

#!/bin/bash

# 日志监控脚本
CONTAINER_NAME=$1
KEYWORD=${2:-"ERROR"}
TAIL_LINES=${3:-100}

if [ -z "$CONTAINER_NAME" ]; then
    echo "Usage: $0 <container_name> [keyword] [tail_lines]"
    echo "Example: $0 my-app ERROR 50"
    exit 1
fi

echo "=== Monitoring logs for container: $CONTAINER_NAME ==="
echo "Keyword: $KEYWORD"
echo "Showing last $TAIL_LINES lines, then following..."
echo "Press Ctrl+C to stop"
echo ""

# 显示最近的日志并实时跟踪
docker logs --tail=$TAIL_LINES -f "$CONTAINER_NAME" | grep --line-buffered -E "(.*$KEYWORD.*|$)" --color=always

使用方法:

chmod +x monitor-logs.sh

# 监控错误日志
./monitor-logs.sh node-app ERROR

# 监控特定关键词
./monitor-logs.sh nginx-test " 404 "

# 显示最近200行并监控
./monitor-logs.sh python-app INFO 200

9.6.2 多容器日志聚合脚本

multi-logs.sh

#!/bin/bash

# 多容器日志聚合脚本
show_usage() {
    echo "Usage: $0 [options] [containers...]"
    echo "Options:"
    echo "  -f, --follow    Follow logs (like tail -f)"
    echo "  -t, --timestamp Show timestamps"
    echo "  -n, --lines N   Number of lines to show (default: 50)"
    echo "  -h, --help      Show this help"
    echo ""
    echo "Examples:"
    echo "  $0 web api db              # Show recent logs for multiple containers"
    echo "  $0 -f web api              # Follow logs for web and api containers"
    echo "  $0 -ftn 100 web           # Follow with timestamp, 100 lines"
}

FOLLOW=false
SHOW_TIMESTAMP=false
LINES=50
CONTAINERS=()

while [[ $# -gt 0 ]]; do
    case $1 in
        -f|--follow)
            FOLLOW=true
            shift
            ;;
        -t|--timestamp)
            SHOW_TIMESTAMP=true
            shift
            ;;
        -n|--lines)
            LINES="$2"
            shift 2
            ;;
        -h|--help)
            show_usage
            exit 0
            ;;
        *)
            CONTAINERS+=("$1")
            shift
            ;;
    esac
done

# 如果没有指定容器,显示所有运行中的容器
if [ ${#CONTAINERS[@]} -eq 0 ]; then
    mapfile -t CONTAINERS < <(docker ps --format "{{.Names}}")
fi

# 构建命令
CMD="docker logs"
if [ "$FOLLOW" = true ]; then
    CMD="$CMD -f"
fi
if [ "$SHOW_TIMESTAMP" = true ]; then
    CMD="$CMD -t"
fi
CMD="$CMD --tail=$LINES"

echo "=== Multi-container Log Monitor ==="
echo "Containers: ${CONTAINERS[*]}"
echo "Command: $CMD"
echo "Press Ctrl+C to stop"
echo ""

# 为每个容器执行日志命令
for container in "${CONTAINERS[@]}"; do
    echo "--- Logs for $container ---"
    $CMD "$container"
    echo ""
done

# 如果设置了 follow,持续监控
if [ "$FOLLOW" = true ]; then
    echo "Following logs... Press Ctrl+C to stop"
    trap 'echo "Stopping log monitor..."; exit 0' INT

    while true; do
        for container in "${CONTAINERS[@]}"; do
            # 使用 docker logs -f 会阻塞,所以这里我们用一个简单的方法
            # 在实际使用中,可以考虑使用 multitail 或其他工具
            sleep 1
        done
    done
fi

9.7 总结

9.7.1 常用命令速查表

需求 命令 说明

查看实时日志

docker logs -f container

类似 tail -f

查看带时间戳的日志

docker logs -ft container

显示时间戳

查看最近N行

docker logs —tail=100 container

显示最后100行

查看时间段日志

docker logs —since 1h container

查看1小时内的日志

Compose 多容器日志

docker-compose logs -f

跟踪所有服务日志

过滤错误日志

docker logs container \

grep ERROR

过滤错误信息

结构化日志美化

docker logs container \

jq .

需要 jq 工具

9.7.2 最佳实践建议

  1. 应用日志配置:确保应用日志输出到 stdout/stderr
  2. 使用结构化日志:JSON 格式便于解析和分析
  3. 合理设置日志级别:生产环境避免过多的 DEBUG 日志
  4. 日志轮转:配置日志驱动的大小和文件数限制
  5. 监控关键日志:使用脚本自动化日志监控和告警
笔记
0人参与


 历史版本

备注 修改日期 修改人
创建版本 2025-12-22 00:17:02[当前版本] 文艺范儿

  目录
    文艺知识分享平台 -V 5.2.5 -wcp