企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] Docker 日志分为两类: * 引擎日志:运行日志, * 容器日志:容器内的服务产生的日志。 # <span style="font-size:15px">**Docker 引擎日志**</span> | 操作系统 | 日志位置 | | --- | --- | | Ubuntu(14.04) | /var/log/upstart/docker.log | | Ubuntu(16.04) | journalctl -u docker.service | | centos 7 | 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/docker.log | | Debian GNU/Linux 7 | /var/log/daemon.log | | Debian GNU/Linux 8 | journalctl -u docker.service | | Boot2Docker | /var/log/docker.log | ## <span style="font-size:15px">**Docker 日志引擎类型**</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当我们启动一个容器时,其实是作为Docker Daemon的一个子进程运行。Docker Daemon可以拿到容器里进程的标准输出与标准错误输出,然后通过Docker的Log Driver模块来处理。 ![](https://img.kancloud.cn/6d/e7/6de7f051d34e33322cf42fa315762308_667x571.png) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个Docker守护程序都有一个默认的日志驱动程序,默认情况下,Docker使用`json-file`驱动,将容器日志作为JSON缓存。 * **none:** 设置后,运行的容器没有日志,docker logs也不返回任何输出。 * **local:** 日志以自定义格式存储,设计这种格式的目的是将开销降到最低。 默认情况下,`local`驱动程序每个容器保留100MB日志消息,并使用自动压缩来减小磁盘上的大小。100MB的默认值 基于每个文件的20M默认大小和此类文件数的默认计数5(以考虑日志轮转)。 * **json-file:** docker默认的日志驱动程序,它会捕获所有容器的标准输出(和标准错误),并使用JSON格式将它们写入文件中。 * **syslog:** `syslog`日志驱动程序会将日志路由到`syslog`服务器。 * **journald:** 该`journald`日志驱动程序发送容器日志的`systemd`日志。可以使用`journalctl`命令或`journalAPI`命令来查看。 除了记录日志本身的内容,还会记录容器ID、启动时的容器名称、容器标记。 journalctl命令来检索日志消息实例,其他参数参考`journalctl --help` | 命令 | 说明 | | --- | --- | | journalctl CONTAINER_NAME=webserver | 使用过滤器表达式过滤指定容器名的日志 | | journalctl -o json CONTAINER_NAME=webserver | 以JSON格式返回日志消息 | * **gelf:** 将日志消息写入Graylog扩展日志格式(GELF)端点,例如Graylog或Logstash。 * **fluentd:** 将日志消息写入 fluentd(forward input) * **awslogs:** 将日志消息写入Amazon CloudWatch Logs * **splunk:** 使用HTTP事件收集器将日志消息写入splunk。 * **etwlogs:** 将日志消息写为Windows事件跟踪(ETW)事件。仅适用于Windows平台。 * **gcplogs:** 将日志消息写入Google Cloud Platform(GCP)Logging。 * **logentries:** 将日志消息写入Rapid7 Logentries ## <span style="font-size:15px">**日志驱动常用命令**</span> | 命令 | 解释 | | --- | --- | | docker info --format '{{.LoggingDriver}}' | 查看系统当前设置的日志驱动 | | docker info \|grep "Logging Driver" | 查看系统当前设置的日志驱动 | | docker inspect -f '{{.HostConfig.LogConfig.Type}}' 容器ID | 查看单个容器的设置的日志驱动 | ## <span style="font-size:15px">**常见问题**</span> * 容器的日志是否会自动轮转? 如果容器使用 json-file 日志驱动,默认情况下,容器的日志是不会论转,会一直增长,需要设置max-size和max-file。 * docker日志查看方式? docker容器的日志根据不同驱动查看日志的方式不同,默认情况下是在`/var/lib/docker/containers/<container_id>/<container_id>-json.log`。 而docker的服务进程日志,如果使用 systemd 运行 Docker 服务,则日志由 systemd-journald 管理。使用 journalctl -u docker.service 查看 Docker 日志。