Skip to content

📋 日志管理与调试

容器日志基础

bash
# 查看容器日志
docker logs myapp

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

# 只看最后 100 行
docker logs --tail 100 myapp

# 只看最近 1 小时的日志
docker logs --since 1h myapp

# 带时间戳
docker logs -t myapp

# 组合使用:实时跟踪 + 带时间戳 + 最后 50 行
docker logs -f -t --tail 50 myapp

# 日志存到了哪里?
docker inspect --format='{{.LogPath}}' myapp
/var/lib/docker/containers/abc123.../abc123...-json.log

日志驱动配置

Docker 默认用 json-file 驱动,日志以 JSON 格式存在宿主机磁盘上。不配置轮转的话,日志会无限增长,最终撑爆磁盘!

bash
# 全局配置日志轮转(/etc/docker/daemon.json)
cat > /etc/docker/daemon.json << 'EOF'
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF
systemctl restart docker

# 单个容器配置
docker run -d --log-opt max-size=10m --log-opt max-file=3 myapp

# 常用日志驱动
# json-file  — 默认,JSON 格式,支持 docker logs
# syslog     — 发送到 syslog,适合已有集中日志系统
# journald   — 发送到 systemd journal
# fluentd    — 发送到 Fluentd
# none       — 禁用日志(不推荐)

# 清理已停止容器的日志(释放磁盘)
docker system prune -f

# 查看 Docker 磁盘占用
docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          12        5         2.8GB     1.5GB (53%)
Containers      8         5         120MB     35MB (29%)
Local Volumes   15        8         1.2GB     400MB (33%)
Build Cache     0         0         0B        0B

调试技巧

bash
# 容器启动就退出?查看退出码
docker inspect --format='{{.State.ExitCode}}' myapp
1
# 退出码含义:0=正常, 1=应用错误, 137=OOM/被kill, 139=段错误, 143=SIGTERM

# 进入崩溃的容器排查
docker run -it --entrypoint /bin/sh myapp

# 查看容器的环境变量
docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' myapp

# 查看容器的挂载点
docker inspect --format='{{json .Mounts}}' myapp | python3 -m json.tool

# 查看容器网络
docker inspect --format='{{json .NetworkSettings.Networks}}' myapp | python3 -m json.tool

# 从容器拷贝文件出来
docker cp myapp:/app/config.yml ./config.yml

# 实时监控所有容器的资源使用
docker stats --no-stream
CONTAINER ID   NAME     CPU %   MEM USAGE / LIMIT    MEM %   NET I/O         BLOCK I/O
a1b2c3d4e5f6   nginx    0.50%   12.3MiB / 512MiB     2.40%   1.2MB / 800kB   0B / 0B
f6e5d4c3b2a1   mysql    45.20%  1.2GiB / 2GiB        58.59%  5.6MB / 3.2MB   12MB / 8MB