导出容器日志需区分应用日志与状态指标:应用日志用docker logs导出stdout/stderr;状态指标(CPU、内存等)须用docker stats采集结构化数据,二者来源、用途不同,不可混用。
导出容器运行状态日志,核心是区分两类“日志”:一类是容器应用输出的标准日志(stdout/stderr),另一类是容器本身的资源状态数据(如 CPU、内存、网络等)。它们来源不同、采集方式不同、用途也不同——不能混用 docker logs 去获取状态指标。
这是最常见的“日志”,指程序打印到控制台的内容。Docker 默认捕获并管理这部分输出:
docker logs myapp > app.log
docker logs --tail 200 myapp > tail.log
docker logs -t --since "2026-08-12T00:00:00" --until "2026-08-13T00:00:00" myapp > daily.log
docker logs -f myapp >> live.log &(注意后台运行时加 &)这类数据反映容器实际负载,不是文本日志,而是结构化指标,需用 docker stats 或配套工具采集:
docker stats --no-stream --format "table {{.Name}}t{{.CPUPerc}}t{{.MemUsage}}t{{.NetIO}}" > stats_now.csv
docker stats --no-stream --format '{{json .}}' myapp > stats.json
while true; do docker stats --no-stream --format "{{.Name}},{{.CPUPerc}},{{.MemUsage}}" >> hourly_stats.csv; sleep 60; done
手动导出适合临时分析,长期运维应让数据自动落盘或对接系统:
--log-driver=json-file --log-opt max-size=10m --log-opt max-file=5
-v $(pwd)/logs:/var/log/nginx 直接映射宿主机目录,日志天然可查可归档直接读取 /var/lib/docker/containers/*/...-json.log 文件虽可行,但该文件是 Docker 内部格式(每行一个 JSON 对象),且受守护进程独占写入,不建议用于常规导出;docker logs 和 docker stats 是安全、稳定、面向用户的接口,应优先使用。