跳至主要内容
五折优惠 全部方案,限时优惠。起价 $2.48/mo
9 min left
开发者工具与 DevOps

Docker Compose 日志简易指南:如何检查与管理

Ada Lovegood 作者 Ada Lovegood 9 分钟阅读 更新于 Feb 23, 2025
docker logs

想知道 Docker 应用在后台做什么吗?让我们深入了解日志这个窗口。日志就像你的容器的秘密窗口,记录它们的每一个动作。日志对于排查问题非常有帮助。但在我们开始之前,让我们先快速了解一下 Docker 和 Docker Compose 是什么。

Docker 允许你将应用打包成小容器,并在大多数操作系统上运行,无需任何依赖。这就像把你的应用放在称为容器的小盒子里,它们可以在任何地方以相同的方式运行。了解容器是学习 Docker Compose 的重要前提。所以我建议你先阅读我们关于 容器化的优势。

Docker Compose 内置 Docker,简化了多个容器化应用的开发。它通过链接服务、网络和存储来实现这一点。Docker 容器日志和 Docker Compose 日志帮助开发者了解每个容器的运行情况。

对 Docker Compose 日志感兴趣吗?你来对地方了。这篇文章会讲解 Docker Compose 日志的基础知识,并深入探讨一些高级细节。了解如何充分利用 Docker Compose 来改进你的项目。

Docker Compose 日志的重要性

假设一个开发者用 Docker 启动了一个应用,但没有配置 Docker 日志。起初一切看起来都正常。但很快用户开始遇到错误,应用变得缓慢。如果没有 Docker 日志,开发者无法看到 Docker 容器内发生了什么。Docker Compose 日志就像这些容器的详细记录。它们记录了每个细节,这对于后续的问题排查至关重要。

作为开发者或系统管理员,你必须了解多容器应用的内部运行和相互交互情况。这就是 Docker Compose 日志的用武之地。那么,为什么需要这些日志呢?

  • 故障排查和调试

应用运行不正常或出现错误时,检查 docker 日志。Docker 日志是追踪问题的首要资源。通过查看 docker 日志,开发者可以定位问题的根源,无论是代码中的 bug、配置错误还是资源问题。

  • 监控应用健康状态

定期监控应用日志有助于了解服务的整体运行状况。日志可以暴露早期警告信号,比如重复出现的错误和响应缓慢。及早发现这些模式能防止未来的问题。

  • 审计和合规性

对于需要遵守特定标准的应用,docker 日志是证明应用是否符合规范的第一手证据。这些日志在监控已授权或未授权的活动时也扮演着重要角色。

  • 优化

日志是软件优化的宝贵资源,提供了性能数据。例如,开发者可以发现运行缓慢的查询、低效的代码路径或未充分利用的资源。

编写 Docker 配置:部署 Web 服务器

在本节中,我们将一起创建一个 Docker 示例。首先需要构建一些东西来开启我们的 Docker Compose 日志之旅。我们部署一个 web 服务器。要创建一个 Dockerfile,只需运行 nano Dockerfile 在你 VPS 上的目标文件夹中执行以下内容,然后保存:

 

FROM nginx:alpine
RUN rm /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

这段代码的每一行各做什么呢?

  • 我们从一个轻量级的基础镜像开始, nginx:alpine.
  • 接下来,我们清除 Nginx 的默认欢迎页面。
  • 然后,我们确保 web 服务器在端口上监听 80.
  • 最后,我们用以下命令运行 Nginx 服务器 CMD.

现在我们的 Dockerfile 已准备好,下一步是创建 Docker Compose 文件。这是 docker-compose.yml 文件:

version: '3.8'
services:
web:
build: .
ports:
- "8080:80"
volumes:
- ./index.html:/usr/share/nginx/html/index.html

让我们逐部分分解,完全理解每个部分:

  • 我们正在使用版本 3.8.
  • 在下一行,我们给服务命名为web“.
  • 然后,我们指示 Docker 从当前文件夹构建我们的 web 服务器。
  • 我们将主机上的端口 8080 映射到容器中的端口 80,以便 web 服务器可以建立连接。
  • 最后,volumes 配置将 index.html 从主机磁盘映射到容器。之后,你可以创建一个 index.html 文件,放入任何你想要的内容,并将其放在 Dockerfiledocker-compose.yml 文件存在。

现在是时候用 Docker Compose 运行我们的 Docker 容器了。只需运行 docker-compose up.

run Docker container with Docker Compose

运行 docker-compose up 命令后,Docker 会从互联网下载所需的镜像,并按照我们配置文件中的说明进行配置。

要检查 Web 服务器是否启动并正常运行,请打开浏览器,输入你的 VPS IP 地址,然后访问 8080 端口。

dockerized web page

另外,你也可以使用 docker-compose up -d 在后台运行容器。

使用 Docker Compose 访问日志

现在 Web 服务器已经启动并正常运行。它正在生成日志并存储这些信息供后续使用。访问 Docker Compose 日志对于故障排查和监控至关重要。但如何读取这些日志呢?这就是 docker-compose 日志 派上用场的地方。确保你在配置文件所在的目录中,然后运行该命令。

Accessing Logs with Docker Compose

有时你可能想实时查看日志的生成过程。只需在前面的命令末尾添加 -f 标志,然后运行 docker-compose logs -f.

Accessing Logs with Docker Compose

某些基于 Docker 的应用在日志中可能不提供时间戳。这种情况下,你可以使用 docker-compose logs -t 为日志的每一行添加记录时间。

Accessing Logs with Docker Compose

Docker 日志也可以显示最新条目。要实现这一点,请使用 docker-compose logs --tail 10 来查看最新的 10 条日志记录。Docker Compose 的日志尾部功能与 Docker 日志尾部功能类似,当你想快速查看最近的活动而不需要浏览整个日志历史时,这个功能特别有用。

accessing logs with docker compose

使用 Docker Compose 的主要目的是创建多容器应用。因此,你可能需要读取特定服务的日志。要做到这一点,请使用 docker-compose logs -f SERVICE,记得替换 SERVICE 并替换为你实际的服务名称。

accessing logs with docker

Docker 日志

对于复杂的应用,特别是在大型环境中,Docker 生态系统可能会变得更加复杂。如我们所知,每个容器都会生成日志。因此,日志驱动程序这一机制负责接收、传递和存储日志。默认情况下,Docker 使用 JSON 文件作为日志驱动程序,但它也支持许多其他驱动程序,每种都各有优缺点。

大家都认可日志在故障排查和增强系统性能等多个方面至关重要。下面我们将介绍使用容器日志的两个主要方面:

  • 监控: 日志的主要作用是监控。它们通常会反映容器化应用的整体运行状态。
  • 故障排除: 出现问题时,日志能帮助我们检测应用故障。

由于 docker logs 和 docker compose logs 会持续生成,它们可能会占满 VPS 存储。因此我们需要一个管理磁盘空间的策略,叫做日志轮转策略。要创建和使用此策略,请返回 docker-compose.yml 文件并打开它。然后添加一个日志记录部分,配置如下:

version: '3.8'
services:
web:
build: .
ports:
- "8080:80"
volumes:
- ./index.htm:/usr/share/nginx/html/index.htm
logging:
driver: json-file
options:
max-size: "200k"
max-file: "10"

你可以根据需要不断调整 max-sizemax-file

Docker 日志投递模型

在更复杂的环境中,工程师可能会选择与默认 JSON 驱动程序不同的日志记录模型,比如 Syslog、fluentd 等。不过需要记住的是,JSON 文件驱动程序适用于大多数日志记录场景,你可能无需偏离默认模式。

根据你的应用架构或组织需求,你可能需要使用称为日志聚合器的集中式日志记录解决方案。这些服务包括 Elasticsearch、Logstash、Kibana 等,旨在接收来自各种源的日志,并在单个集中位置进行整合、存储和分析。

反过来说,你应该使用更经济高效的存储解决方案来存储日志。考虑这样一个场景:你的 VPS 使用高速且昂贵的存储,用这样的高端资源来存储可能只需要供将来参考的日志就不划算了。

有很多种日志记录模型可用,各有优劣。重要的是要仔细评估每种模型,根据你的具体需求选择一种。

linux-vps

在拥有 root 权限、NVMe 与 AMD EPYC 强大性能的 Linux VPS 上构建应用。

查看 Linux 套餐

结语

了解 Docker Compose 日志很关键。它们帮助你有效地管理和调试 Docker 应用。学会访问和监控这些日志可以改进故障排查,提升应用的性能和安全性。无论是开发还是系统管理,使用 Docker Compose 日志都是必要的。它们确保你的容器管理有效进行。

常见问题

如何按时间筛选 Docker Compose 日志?

Docker Compose 没有提供直接的按时间过滤日志的方法。不过你可以通过管道将日志传给 grep 来按模式匹配过滤。比如,你可以使用:docker-compose logs | grep "2023-04-06",将 "2023-04-06" 替换为你要搜索的具体日期或时间模式。

如何停止使用 Docker Compose 启动的容器?

进入包含 docker-compose.yml 文件的目录,运行命令 docker-compose down。

如何手动删除日志文件?

除了在 docker-compose.yml 文件中配置日志轮转,你也可以手动删除 /var/lib/docker/containers/<container_id>/ 中的 Docker JSON 日志文件。操作前,应该用 docker ps -a 确认 Docker 容器 ID。

可以跟踪 Docker 日志吗? 

可以。要实现这一点,你应该使用 docker logs 命令配合 -f 或 --follow 选项。这将为你实时显示 Docker 日志。

分享

博客更多内容

继续阅读。

准备好部署了吗? 起价 $2.48/月。

独立云厂商,自 2008 年起。AMD EPYC、NVMe、40 Gbps。14 天退款保证。