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