如何查看分离的 Docker 容器的日志

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Docker 彻底改变了我们开发和部署应用程序的方式,但管理分离容器的日志可能是一项挑战。本教程将指导你查看分离的 Docker 容器的日志,帮助你更好地理解和排查容器化应用程序的故障。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/attach("Attach to Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/attach -.-> lab-411630{{"如何查看分离的 Docker 容器的日志"}} docker/exec -.-> lab-411630{{"如何查看分离的 Docker 容器的日志"}} docker/logs -.-> lab-411630{{"如何查看分离的 Docker 容器的日志"}} docker/info -.-> lab-411630{{"如何查看分离的 Docker 容器的日志"}} docker/version -.-> lab-411630{{"如何查看分离的 Docker 容器的日志"}} end

理解 Docker 容器

Docker 是一个广受欢迎的开源平台,它允许开发者在容器化环境中构建、部署和运行应用程序。容器是轻量级的、独立的、可执行的软件包,其中包含运行应用程序所需的一切,包括代码、运行时环境、系统工具和库。

什么是 Docker 容器?

Docker 容器是一种标准化的软件单元,它将代码及其所有依赖项打包在一起,这样应用程序就能在不同的计算环境中快速、可靠地运行。容器是从 Docker 镜像创建而来的,而 Docker 镜像是容器的蓝图。Docker 镜像是使用 Dockerfile 构建的,Dockerfile 是一个文本文件,其中包含用户在命令行上调用的所有命令,用于组装镜像。

graph TD A[Docker 镜像] --> B[Docker 容器] B --> C[应用程序] B --> D[运行时环境] B --> E[系统工具] B --> F[库]

Docker 容器的优点

  • 一致性:无论环境如何,容器都能确保应用程序以相同的方式运行。
  • 可移植性:容器可以在任何安装了 Docker 的机器上运行,这使得将应用程序从一个环境迁移到另一个环境变得很容易。
  • 可扩展性:可以轻松地扩大或缩小容器规模以满足不断变化的需求。
  • 高效性:容器是轻量级的,比传统虚拟机使用的资源更少。

Docker 架构

Docker 使用客户端 - 服务器架构,其中 Docker 客户端与 Docker 守护进程进行通信,Docker 守护进程负责构建、运行和分发 Docker 容器。

组件 描述
Docker 客户端 Docker 系统的用户界面。它允许用户与 Docker 守护进程进行交互。
Docker 守护进程 管理 Docker 对象(如图像、容器、网络和卷)的后台进程。
Docker 镜像仓库 Docker 镜像的存储和分发系统。默认的镜像仓库是 Docker Hub,这是 Docker 提供的一个公共镜像仓库。
graph LR A[Docker 客户端] --> B[Docker 守护进程] B --> C[Docker 镜像仓库] B --> D[Docker 镜像] B --> E[Docker 容器]

查看分离容器的日志

当你以分离模式运行 Docker 容器(使用 -d 标志)时,容器会在后台运行,你无法直接访问其输出。不过,你仍然可以使用 Docker CLI 查看分离容器的日志。

查看分离容器的日志

要查看分离容器的日志,可以使用 docker logs 命令。基本语法如下:

docker logs [容器名称或容器 ID]

例如,假设你有一个名为 my-app 的分离容器:

docker run -d --name my-app nginx

你可以使用以下命令查看此容器的日志:

docker logs my-app

这将在你的终端中显示 my-app 容器的日志。

实时查看日志

如果你想实时查看分离容器的日志,可以在 docker logs 命令中使用 -f(跟随)标志:

docker logs -f my-app

这将使日志输出在你的终端中保持打开状态,并在容器生成新的日志条目时持续显示它们。

过滤日志

你还可以按时间或特定日志级别过滤日志。例如,要查看最后 10 条日志条目:

docker logs --tail 10 my-app

或者要查看过去 5 分钟内的日志:

docker logs --since 5m my-app

你还可以使用 --until 标志按日志级别过滤日志:

docker logs --until 5m my-app

这将显示过去 5 分钟内的日志。

日志驱动程序

Docker 支持各种日志驱动程序,这些驱动程序决定了容器日志的存储和管理方式。默认的日志驱动程序是 json-file,但你可以为 Docker 守护进程或单个容器配置不同的日志驱动程序。这对于与外部日志管理系统集成很有用。

实用的日志记录技术

除了基本的 docker logs 命令外,还有一些实用技术可用于管理和分析 Docker 容器的日志。

记录到文件

你可以配置 Docker 容器将日志记录到主机系统上的文件中,而不是依赖默认的 json-file 日志驱动程序。这对于日志的长期存储和分析很有用。

要记录到文件,可以在启动容器时使用 --log-driver--log-opt 标志:

docker run -d --name my-app --log-driver=local --log-opt=max-size=10m --log-opt=max-file=5 nginx

在此示例中,日志将被写入主机系统上的一个文件,最大文件大小为 10MB,最多 5 个日志文件。

记录到远程系统

你还可以配置 Docker 容器将日志发送到远程日志系统,如 Elasticsearch、Splunk 或 Syslog。这对于集中式日志管理和分析很有用。

要记录到远程系统,可以在启动容器时使用 --log-driver--log-opt 标志:

docker run -d --name my-app --log-driver=syslog --log-opt=syslog-address=tcp://192.168.1.100:514 nginx

在此示例中,日志将被发送到 IP 地址为 192.168.1.100、端口为 514 的 Syslog 服务器。

日志记录实用工具

有几个第三方实用工具可以帮助你更有效地管理和分析 Docker 日志。一些流行的选项包括:

  • Logspout:一个轻量级容器,用于收集 Docker 日志并将其转发到集中式日志服务。
  • Fluentd:一个开源数据收集器,可用于聚合和处理 Docker 日志。
  • Graylog:一个强大的日志管理和分析平台,可摄取和处理 Docker 日志。

这些工具可以提供额外的功能,如日志过滤、警报和可视化,以帮助你更好地理解和管理 Docker 容器的日志。

总结

在本全面指南中,你将学习如何查看分离的 Docker 容器的日志,探索实用的日志记录技术,并获得有效管理和监控基于 Docker 的应用程序所需的技能。在本教程结束时,你将对 Docker 日志记录有扎实的理解,并有信心处理各种日志记录场景。