docker logs
命令查看日志docker logs
是Docker原生提供的核心日志查看工具,支持多种选项满足不同场景需求:
docker logs <容器名称或ID>
,输出容器自启动以来的所有标准输出(stdout)和标准错误(stderr)日志。-f
选项(类似tail -f
),实时查看容器最新日志,按Ctrl+C
退出。--tail
指定显示的日志行数(如--tail 100
显示最后100行),避免输出过多内容。--since
(开始时间)和--until
(结束时间)过滤,支持相对时间(如--since 5m
表示过去5分钟)或绝对时间(如--since "2025-09-01"
)。docker logs -f --tail 50 --since "1 hour ago" my_nginx
。Docker守护进程(dockerd)的日志记录了Docker服务本身的运行状态(如启动、停止、错误),其位置取决于系统配置:
journalctl
命令,journalctl -u docker.service
查看完整日志;journalctl -u docker.service --since "2025-09-01"
按时间过滤。/var/log/upstart/docker.log
。Docker默认使用json-file
驱动,容器日志以JSON格式存储在宿主机上,路径为:
/var/lib/docker/containers/<容器ID>/<容器ID>-json.log
。
可通过docker inspect --format='{{.LogPath}}' <容器ID>
快速获取具体路径。
修改/etc/docker/daemon.json
文件(若不存在则创建),设置默认日志驱动及选项:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m", // 单个日志文件最大10MB
"max-file": "3" // 最多保留3个日志文件(当前+2个轮转)
}
}
修改后需重启Docker服务生效:sudo systemctl restart docker
。
启动容器时通过--log-driver
和--log-opt
覆盖全局配置:
docker run --log-driver=json-file --log-opt max-size=20m --log-opt max-file=5 my_app
。
通过max-size
(单个文件大小)和max-file
(保留文件数量)参数实现自动轮转,避免日志文件过大。例如:
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 my_app
表示每个日志文件最大10MB,保留3个文件(超过时自动删除最旧的)。
若日志已占满磁盘,可手动清理:
sudo find /var/lib/docker/containers/ -name "*-json.log" -exec truncate -s 0 {} \;
sudo truncate -s 0 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log
。对于生产环境,建议使用第三方工具集中管理日志,提升分析与处理效率:
fluentd
,指向Fluentd服务(Fluentd作为Logstash的前置收集器):docker run --log-driver=fluentd --log-opt fluentd-address=localhost:24224 my_app
;专注于日志收集、存储与分析的工具,支持实时告警、日志聚合等功能。配置方式类似ELK,需将容器日志驱动设置为gelf
,并指向Graylog服务器。
DEBUG
改为INFO
)。json-file
适用于大多数场景;若需集中管理,选syslog
/fluentd
;若需与系统日志集成,选journald
。docker logs -f
或第三方工具监控容器日志,及时发现错误(如grep "ERROR" /var/lib/docker/containers/<容器ID>/*.log
)。rsync
),防止数据丢失。