Docker 应用的日志存放位置和形式取决于容器的日志驱动配置以及应用程序自身的日志处理方式。以下是详细的分类说明:
Docker 默认将容器的 stdout/stderr
输出捕获为日志,默认使用 json-file
驱动,存储位置为:
/var/lib/docker/containers/<container_id>/<container_id>-json.log
查看方式:
# 查看容器日志(自动跟踪最后100行)
docker logs -f --tail 100 <container_name_or_id>
# 直接查看原始日志文件(需root权限)
sudo cat /var/lib/docker/containers/<container_id>/<container_id>-json.log
Docker 支持多种日志驱动,通过 --log-driver
指定,常见驱动及路径:
日志驱动 | 存储位置/方式 |
---|---|
json-file |
默认路径:/var/lib/docker/containers/<container_id>/*.log |
syslog |
发送到宿主机的 syslog 服务(默认路径:/var/log/syslog 或 /var/log/messages ) |
journald |
存储到 systemd 日志,通过 journalctl -u docker 查看 |
fluentd |
发送到配置的 Fluentd 服务 |
awslogs |
上传到 AWS CloudWatch Logs |
gelf /splunk |
发送到 Graylog 或 Splunk 服务器 |
bash
docker inspect -f '{{.HostConfig.LogConfig.Type}}' <container_name>
如果容器内应用直接将日志写入文件(如 Nginx、MySQL 等),日志位置由应用配置决定。常见路径:
- Nginx: /var/log/nginx/
(容器内路径)
- MySQL: /var/log/mysql/error.log
(容器内路径)
- 自定义路径: 通过 docker run -v
挂载宿主机目录持久化日志。
bash
docker run -v /host/path:/container/path my_image
json-file
驱动限制日志大小:
bash
docker run --log-opt max-size=10m --log-opt max-file=3 my_image
ELK
、Fluentd
或 Loki
收集多容器日志。命令 | 作用 |
---|---|
docker logs <container> |
查看容器标准输出日志 |
docker inspect <container> |
查看容器详细信息(包括日志配置) |
journalctl -u docker |
查看 journald 驱动的日志 |
ls /var/lib/docker/containers/*/*.log |
查找默认日志文件(需 root) |
根据您的具体场景选择合适的日志管理方式。如果遇到权限问题,使用 sudo
或确保当前用户在 docker
用户组中。