Docker 日志

本文介绍了Docker引擎及容器日志的位置与收集方法。引擎日志由系统服务管理,位置因系统而异;容器日志可通过docker logs命令访问,并默认存储于特定路径。此外,还介绍了如何使用Docker内置的日志驱动进行高效日志收集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker 日志都在哪里?怎么收集?
日志分两类,一类是 Docker 引擎日志;另一类是 容器日志。

Docker 引擎日志
Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (CentOS 7, Ubuntu 16.04)。前者一般位于 /var/log/upstart/docker.log 下,后者一般通过 jounarlctl -u docker 来读取。不同系统的位置都不一样,SO上有人总结了一份列表,我修正了一下,可以参考:

系统 日志位置
Ubuntu(14.04) /var/log/upstart/docker.log
Ubuntu(16.04) journalctl -u docker.service
CentOS 7/RHEL 7/Fedora journalctl -u docker.service
CoreOS journalctl -u docker.service
OpenSuSE journalctl -u docker.service
OSX ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log/d‌​ocker.log
Debian GNU/Linux 7 /var/log/daemon.log
Debian GNU/Linux 8 journalctl -u docker.service
Boot2Docker /var/log/docker.log
容器日志
容器的日志 则可以通过 docker logs 命令来访问,而且可以像 tail -f 一样,使用 docker logs -f 来实时查看。如果使用 Docker Compose,则可以通过 docker-compose logs <服务名> 来查看。

如果深究其日志位置,每个容器的日志默认都会以 json-file 的格式存储于 /var/lib/docker/containers/<容器id>/<容器id>-json.log 下,不过并不建议去这里直接读取内容,因为 Docker 提供了更完善地日志收集方式 - Docker 日志收集驱动。

关于日志收集,Docker 内置了很多日志驱动,可以通过类似于 fluentd, syslog 这类服务收集日志。无论是 Docker 引擎,还是容器,都可以使用日志驱动。比如,如果打算用 fluentd 收集某个容器日志,可以这样启动容器:

$ docker run -d \
–log-driver=fluentd \
–log-opt fluentd-address=10.2.3.4:24224 \
–log-opt tag=”docker.{{.Name}}” \
nginx
其中 10.2.3.4:24224 是 fluentd 服务地址,实际环境中应该换成真实的地址。

### 如何查看或管理 Docker 容器的日志 #### 查看 Docker 日志的方法 可以通过 `docker logs` 命令来查看容器的标准输出和标准错误流日志。此命令适用于正在运行或已停止的容器[^1]。 ```bash docker logs <container_name_or_id> ``` 如果希望实时跟踪日志的变化,可以加上 `-f` 参数实现类似于 `tail -f` 的效果: ```bash docker logs -f <container_name_or_id> ``` 对于更复杂的场景,还可以指定时间戳显示 (`--timestamps`) 或者仅获取最近几条日志 (使用 `--since` 和 `--until`)[^1]。 #### 获取日志文件路径并直接操作 除了通过 `docker logs` 命令外,也可以定位到具体的日志文件位置进行分析。默认情况下,Docker日志保存在 `/var/lib/docker/containers/<container-id>/<container-id>-json.log` 中[^2]。要快速找到某个特定容器的日志文件地址,可执行如下指令: ```bash docker inspect --format='{{.LogPath}}' <container_name_or_id> ``` 得到的结果是一个绝对路径字符串指向该容器对应的 JSON 格式的日志文档。之后可以直接编辑或者复制这些原始数据用于进一步处理。 #### 复制日志至外部存储 当需要保留一份副本时,利用重定向功能把日志导出成独立文件不失为一种好办法。下面展示了一个例子说明怎样创建一个新的 `.log` 文件存放在用户家目录里[^4]: ```bash docker logs <container_name_or_id> > ~/exported-container-log.log ``` 另外还有一种方式就是借助 `docker cp` 把内部生成的内容搬移到宿主机上: ```bash docker cp <container_name_or_id>:<source_path_inside_container> <destination_on_host> ``` 不过这种方法的前提条件是你知道确切的目标源位于何处以及是否有权限访问它. #### 删除过期的大容量日志 长期积累下来可能会占用大量磁盘空间,因此定期清理不必要的历史记录很有必要.虽然不能直接删掉现有的 log file ,但是能够调整驱动参数限制其增长规模.比如修改 daemon.json 配置项加入 max-size/max-file 来控制单个文件大小上限及轮转次数 : ```json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } ``` 然后重启服务使更改生效即可. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值