在 Docker 中,系统日志的存储位置和查看方式取决于日志驱动(Logging Driver)的配置以及操作系统类型。以下是详细说明:
作用:记录 Docker 服务本身的运行状态(如启动、停止、错误等)。
使用 systemd
的系统(如 Ubuntu 16.04+/CentOS 7+):
journalctl -u docker.service # 查看完整日志
journalctl -u docker.service --since "2023-01-01" --no-pager # 按时间过滤
systemd-journald
管理,存储路径为 /var/log/journal/
。非 systemd
的系统(如旧版 Debian):
cat /var/log/upstart/docker.log
应用程序和服务日志 -> Docker -> Windows
bash
cat ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
作用:记录单个容器的标准输出(STDOUT
/STDERR
)。
json-file
)日志路径:
/var/lib/docker/containers/<container_id>/<container_id>-json.log
<container_id>
可通过 docker ps -a
获取。查看日志命令:
docker logs <container_name_or_id> # 查看实时日志
docker logs --tail 100 <container_id> # 查看最后100行
docker logs -f <container_id> # 跟踪日志(类似 tail -f)
如果配置了其他日志驱动(如 syslog
、journald
、fluentd
等),日志位置会变化:
- syslog
:日志发送到系统 syslog(通常为 /var/log/syslog
或 /var/log/messages
)。
- journald
:使用 journalctl -u docker
查看。
- awslogs
/gcplogs
:日志发送到云服务商平台。
docker inspect -f '{{.HostConfig.LogConfig.Type}}' <container_id>
修改 /etc/docker/daemon.json
(Linux/macOS)或 Docker Desktop 设置(Windows):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
max-size
:单个日志文件大小限制。max-file
:保留的日志文件数量。重启 Docker 生效:
sudo systemctl restart docker
启动容器时指定参数:
docker run --log-driver json-file --log-opt max-size=10m nginx
bash
sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log
logrotate
配置(Linux)。日志文件过大:
max-size
和 max-file
限制。日志驱动不生效:
daemon.json
语法正确,且重启了 Docker。日志丢失:
journald
,检查 journald
的存储限制(/etc/systemd/journald.conf
)。通过以上方法,你可以快速定位和管理 Docker 的系统日志及容器日志。如果需要更复杂的日志管理,建议结合 ELK(Elasticsearch+Logstash+Kibana)或 Grafana Loki 等工具。