如何在Docker容器中生成核心文件?
使用ulimit命令,我设置核心文件的大小。
ulimit -c unlimited
我使用gcc -g选项编译c源代码。 然后a.out生成。 命令后
./a.out
有运行时错误。
(core dumped)
但没有生成核心文件(例如core.294340)
如何生成核心文件?
首先确保容器将核心写入容器文件系统中的现有位置。 核心生成设置在主机中设置,而不是在容器中。 例:
echo '/cores/core.%e.%p' | sudo tee /proc/sys/kernel/core_pattern
将在文件夹/内核中生成内核。
在您的Dockerfile中,创build该文件夹:
RUN mkdir /cores
您需要指定核心大小限制; ulimit shell命令不起作用,只会影响当前shell。 您需要使用docker run选项–imulit和soft和hard限制。 在构buildDocker镜像之后,运行如下所示的容器:
docker run --ulimit core=99999999999:99999999999 --mount source=coredumps_volume,target=/cores ab3ca583c907 ./a.out
其中coredumps_volume是您已经创build的卷,在容器终止之后,核心将持续存在。 例如
docker volume create coredumps_volume