3.6. 在容器中调试应用程序
您可以使用为故障排除的不同方面量身定制的各种命令行工具。以下提供类别以及常见的命令行工具。
注意
这不是命令行工具的完整列表。用于调试容器应用的工具选择主要基于容器镜像和您的用例。
例如,systemctl
,journalctl
,ip
,netstat
,ping
,traceroute
,perf
,iostat
工具可能需要 root 访问权限,因为它们与系统级别的资源(如网络、systemd 服务或硬件性能计数器)进行交互,这些在无根容器中受到限制。
Rootless 容器在不需要提升特权的情况下运行,在用户命名空间中运行,以改进与主机系统的安全性和隔离。它们通过降低特权升级漏洞的风险,与主机提供有限的交互,降低攻击面并提高安全性。
rootful 容器以提升的特权运行,通常以 root 用户身份运行,从而授予系统资源和功能的完整访问权限。虽然 rootful 容器提供更大的灵活性和控制,但它们会带来安全风险,因为他们可能会升级特权升级并暴露主机系统漏洞。
有关 rootful 和 rootless 容器的更多信息,请参阅设置无根容器、升级到无根容器,以及 rootless 容器的特殊注意事项。
systemd 和进程管理工具
systemctl
- 控制容器内的 systemd 服务,允许启动、停止、启用和禁用操作。
journalctl
- 查看 systemd 服务生成的日志,以帮助对容器问题进行故障排除。
网络工具
ip
- 管理容器内的网络接口、路由和地址。
netstat
- 显示网络连接、路由表和接口统计信息。
ping
- 验证容器或主机之间的网络连接。
traceroute
- 标识路径数据包到达目的地,可用于诊断网络问题。
流程和性能工具
ps
- 列出容器中当前运行的进程。
top
- 通过容器内的流程提供对资源使用情况的实时洞察。
htop
- 用于监控资源使用率的交互式进程查看器。
perf
- CPU 性能分析、追踪和监控,有助于识别系统或应用程序中的性能瓶颈。
vmstat
- 报告容器内的虚拟内存统计信息,辅助性能分析。
iostat
- 监控容器中块设备的输入/输出统计信息。
GDB
(GNU Debugger)- 一个命令行调试器,有助于检查和调试程序,方法是允许用户跟踪和控制其执行、检查变量并在运行时分析内存和注册。如需更多信息,请参阅 Red Hat OpenShift 容器中调试应用程序 的文章。
strace
- 截获并记录程序发出的系统调用,通过显示程序与操作系统之间的交互来帮助进行故障排除。
安全和访问控制工具
sudo
- 启用执行具有升级权限的命令。
chroot
- 更改命令的根目录,有助于在不同根目录内测试或进行故障排除。
特定于 podman 的工具
Podman 日志
- batch-retrieves 执行时一个或多个容器存在的任何日志。
Podman inspect
- 显示容器和镜像的低级别信息,如名称或 ID 标识。
Podman 事件
-
监控并打印 Podman 中发生的事件。每个事件都包括一个时间戳、类型、状态、名称(如果适用)和镜像(如果适用)。默认日志机制是
journald
。 podman run --health-cmd
- 使用健康检查来确定在容器内运行的进程的健康状态或就绪状态。
Podman 顶部
- 显示容器的运行进程。
Podman exec
- 在 中运行命令或附加到正在运行的容器对于更好地了解容器中发生的情况非常有用。
Podman 导出
- 当容器出现故障时,基本上无法知道发生了什么。从容器中导出文件系统结构将允许检查可能不在挂载卷中的其他日志文件。
其他资源
-
gdb
-
-
内核转储、
sosreport
、gdb
、ps
、核心
.
-
内核转储、
-
docker exec + env,
netstat
,kubectl
,etcdctl
,journalctl
, docker logs
-
docker exec + env,
-
watch,
podman logs
,systemctl
, systemctl ,podman exec
/kill
/restart
,podman insect
,podman top
,podman exec
,podman export
,paunch
-
watch,
外部链接