📋 日志管理与调试
容器日志基础
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