我是一个 docker 菜鸟,最近遇到了一个问题。我随机引用一个 几年前的 Pipermail这比我以前提出的问题要优雅得多:
在运行 docker 容器时,我注意到我的 Linux 机器中存在以下 core_pattern 行为。我不确定这是否是错误,但它不一致并且没有记录。
如果在主机上设置了 core_pattern,容器将观察并使用该模式来转储核心(每个 cgroup 没有 core_pattern)。根据 core(5) 设置 core_pattern 可以:
- echo "/tmp/cores/core.%e.%p" > /proc/sys/kernel/core_pattern
- echo "|/bin/custom_core /tmp/cores/ %e %p " > /proc/sys/kernel/core_pattern
前一种模式评估容器文件系统命名空间中的 /tmp/cores 路径。这意味着主机在 /tmp/cores 中看不到核心文件。
但是,后者评估全局文件系统命名空间中的 /bin/custom_core 路径。此外,如果 /bin/core 决定将核心写入路径(在本例中为 /tmp/cores,如 custom_core 的 arg 所示),则该路径也将在全局文件系统命名空间中进行评估。
后一种行为是反直觉的并且容易出错,因为容器可以填充它无法直接访问的核心文件目录(这意味着如果某人只能访问容器,则也无法访问核心进行调试) 。
在得出任何结论之前,线程就死掉了。
为什么会有这种行为差异?现在问题解决了吗,或者有什么指导吗?