简介
在本实验中,你将学习如何高效使用 docker logs
命令查看 Docker 容器的输出内容。我们将从理解如何查看运行中容器的基础日志开始。
在掌握基础操作后,你将进一步探索如何实时追踪容器日志,这对于监控和调试活跃进程至关重要。最后,你将学习如何通过包含时间戳、指定显示日志末尾的行数以及基于时间范围筛选日志等方式,来提升日志查看体验。
在本实验中,你将学习如何高效使用 docker logs
命令查看 Docker 容器的输出内容。我们将从理解如何查看运行中容器的基础日志开始。
在掌握基础操作后,你将进一步探索如何实时追踪容器日志,这对于监控和调试活跃进程至关重要。最后,你将学习如何通过包含时间戳、指定显示日志末尾的行数以及基于时间范围筛选日志等方式,来提升日志查看体验。
在本步骤中,我们将学习如何启动 Docker 容器并查看其基础日志。日志对于理解容器内部运行状态、调试问题以及监控其行为至关重要。
首先,让我们从 Docker Hub 拉取一个简单的 Nginx 镜像。该镜像将用于运行一个 Web 服务器容器。
docker pull nginx:latest
你将看到显示镜像正在下载的输出。下载完成后,可以通过列出镜像来验证该镜像已本地可用:
docker images
现在,让我们基于 Nginx 镜像运行一个容器。我们将使用 detached 模式(-d
)使其在后台运行,并将其命名为 my-nginx
。
docker run -d --name my-nginx nginx
该命令的输出将是容器 ID,这表示容器已在后台成功启动。
要查看 my-nginx
容器生成的基础日志,我们使用 docker logs
命令后接容器名称或 ID。
docker logs my-nginx
你将看到容器内运行的 Nginx 进程的标准输出和标准错误流。这些日志通常包含 Nginx 服务器启动和处理请求的相关信息。
在上一步中,我们查看了容器启动后的日志。但有时你需要实时查看日志生成过程,这对于调试或监控活跃进程特别有用。
要实时追踪容器日志,我们使用带有 -f
(或 --follow
)选项的 docker logs
命令。这将保持终端开启,并在新日志条目出现时立即显示。
让我们实时追踪 my-nginx
容器的日志:
docker logs -f my-nginx
该命令会先显示当前日志,然后等待新日志条目。由于我们的 Nginx 容器正在运行但没有活跃的请求处理,你可能不会立即看到新日志。
为了生成一些新日志条目,我们可以向容器内运行的 Nginx 服务器发送请求。默认情况下,Nginx 监听 80 端口。虽然我们在 docker run
命令中没有将端口映射到主机,但仍可以通过 curl
从主机内部访问容器的网络。
在 LabEx 环境中打开一个新的终端标签页。在这个新标签页中执行以下命令向 Nginx 容器发送请求:
curl http://localhost:80
你应该会在新终端标签页中看到默认的 Nginx 欢迎页面 HTML 输出。
现在切换回正在追踪日志的终端标签页(docker logs -f my-nginx
)。你应该能看到新的日志条目出现,表明 Nginx 处理了来自 curl
的请求。这些条目通常包含客户端 IP、请求方法、请求路径和 HTTP 状态码等信息。
要停止追踪日志,在运行 docker logs -f
的终端中按下 Ctrl+C
。
在前面的步骤中,我们查看了基础日志并实时追踪了日志。然而,基础的 docker logs
输出不包含时间戳,这使得关联事件或理解日志条目的时间顺序变得困难。此外,有时你只需要查看最近的日志条目。
要在日志输出中包含时间戳,我们使用带有 -t
(或 --timestamps
)选项的 docker logs
命令。
让我们查看带时间戳的 my-nginx
容器日志:
docker logs -t my-nginx
现在你将看到每个日志条目前都带有时间戳,表明该日志条目是由容器生成的时间。这对调试和分析非常有帮助。
有时,你只对最近的日志条目感兴趣,类似于在 Linux 中使用 tail
命令。docker logs
命令为此提供了 --tail
选项。你可以指定要从日志末尾查看的行数。
例如,要仅查看 my-nginx
容器的最后 5 条日志:
docker logs --tail 5 my-nginx
这将仅输出容器日志的最后 5 行。你可以将 --tail
与 -t
结合使用,查看带时间戳的最后几条日志。
docker logs -t --tail 5 my-nginx
该命令将显示最后 5 条日志条目,每条都带有对应的时间戳。
除了查看全部日志或最近日志外,你还可以按特定时间范围筛选容器日志。这在调查特定时间段内发生的事件时特别有用。
docker logs
命令提供了 --since
和 --until
选项来基于时间筛选日志。这些选项支持多种时间格式,包括 RFC3339 时间戳、Unix 时间戳或相对时间(例如 10m
表示 10 分钟,1h
表示 1 小时)。
让我们尝试筛选日志。首先需要在不同时间生成一些日志。我们可以再次向 Nginx 容器发送 curl
请求来实现。
打开一个新的终端标签页,间隔几秒多次运行 curl
命令:
curl http://localhost:80
sleep 5
curl http://localhost:80
sleep 5
curl http://localhost:80
现在查看带时间戳的 my-nginx
容器日志,观察这些请求的时间:
docker logs -t my-nginx
注意 curl
命令生成的日志条目的时间戳。
要筛选特定时间之后的日志,可以使用 --since
选项。例如查看最近 1 分钟生成的日志:
docker logs --since 1m my-nginx
该命令将显示 my-nginx
容器在过去 1 分钟内生成的所有日志条目。
你也可以使用 --until
选项筛选特定时间之前的日志。例如查看 1 分钟前生成的日志:
docker logs --until 1m my-nginx
该命令将显示 my-nginx
容器在 1 分钟前生成的所有日志条目。
你可以组合使用 --since
和 --until
来查看特定时间窗口内的日志。例如查看 5 分钟前到 1 分钟前的日志:
docker logs --since 5m --until 1m my-nginx
请注意,具体输出结果取决于你执行 curl
命令和运行 docker logs
命令的时间。
在本实验中,我们学习了使用 docker logs
命令查看容器输出的基本步骤。首先我们拉取了 Docker 镜像并以分离模式运行容器。随后,我们探索了如何查看运行容器生成的基础日志,这些日志可以帮助我们了解容器的启动和运行情况。
此外,我们还深入学习了如何使用 -f
选项实时追踪容器日志,从而能够持续监控日志流的生成过程。这种实时日志功能对于调试和观察容器的动态行为至关重要。