考虑这个简单的“管道”核心模式:
vagrant@myhost:~$ cat /proc/sys/kernel/core_pattern
|/var/core-manager.sh %t
Run Code Online (Sandbox Code Playgroud)
拥有这个同样简化的核心管理器脚本:
vagrant@myhost:~$ cat /var/core-manager.sh
#!/bin/bash
(
file=/tmp/mycore.$1
cat > $file < /dev/stdin
)
Run Code Online (Sandbox Code Playgroud)
现在在 Linux 主机中重现并检索核心转储:
vagrant@myhost:~$ ls -lrt /tmp/mycore*
total 0
vagrant@myhost:~$ ulimit -c unlimited
vagrant@myhost:~$ sleep 100 &
[1] 16647
vagrant@myhost:~$ kill -SIGSEGV 16647
[1]+ Segmentation fault (core dumped) sleep 100
vagrant@myhost:~$ ls -lrt /tmp/mycore*
-rw-rw-rw- 1 root root 385024 Jan 28 18:42 /tmp/mycore.1580233332
Run Code Online (Sandbox Code Playgroud)
现在,在容器(比方说 busybox)内重现它:
(正如你们许多人可能知道的那样,核心模式是由容器继承的,尽管 ulimit 不是,因为它取决于调用 shell,但可能“无限制”是 busybox shell 中的默认值,因为问题是我有无限的 ulimit对于容器内的核心大小“什么都不做”,这就是我真正想要的)。
vagrant@myhost:~$ docker run -it --rm busybox
/ # …Run Code Online (Sandbox Code Playgroud)