如何在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 
    Interesting Posts