如何在 docker 容器中禁用核心文件转储

How to disable core file dumps in docker container

我的 PHP 容器运行 puppeteer 来生成 PDF。通过生成 PDF 文档,它还在我的容器中创建了两个核心转储文件。我不确定它们实际上来自哪里。

host/server是CentOS 7。

我检查了以下内容:

  1. 没有应用程序错误日志,Browsershot/puppeteer 运行 没有错误。
  2. /var/log/messages
  3. 中未找到错误日志(例如段错误)

我试过禁用核心转储

按照 https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ 的禁用核心转储部分,我完成了:

  1. 将以下内容添加到 /etc/security/limits.conf
* soft core 0
* hard core 0
  1. 通过以下方式创建了禁用核心-dumps.sh:echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh

  2. 将以下内容添加到 /etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0
  1. 并且重启服务器和容器

  2. 我也试过在容器内设置ulimit -c 0(高山)

None 以上技巧对我有用。每次 puppeteer 生成 PDF 时,它总是创建两个核心转储文件,如下所示:

core.131 core.52

核心文件如下所示:

谁能帮我禁用核心转储?非常感谢。

您必须使用 --ulimit core=0 选项启动容器以禁用核心转储。

参考:https://docs.docker.com/engine/reference/commandline/run/#set-ulimits-in-container---ulimit

例子

在主机上,暂时将coredump路径设置为/tmp进行验证:

echo '/tmp/core.%e.%p' | sudo tee /proc/sys/kernel/core_pattern

照常启动容器并强制进行核心转储:

docker run --rm -it bash
(inside the container)
# yes > /dev/null &
# kill -SIGABRT $(pidof yes)
# ls /tmp
(shows core.yes.<pid>)

现在,--ulimit core=0

docker run --ulimit core=0 --rm -it bash
(inside the container)
# yes > /dev/null &
# kill -SIGABRT $(pidof yes)
# ls /tmp
(No entries)

我在 docker swarm 服务上也有这个问题,--ulimit core=0 在 swarm 服务中不起作用我在下面的命令中使用并在 docker swarm 服务中为我工作!

sysctl -w kernel.core_pattern=/dev/null

对于那些使用 docker-compose 的用户,在 .yml 文件中设置 ulimits:

services:
    app:
        ulimits:
            core:
                hard: 0
                soft: 0