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

如何在docker容器中禁用核心文件转储,docker,docker-compose,puppeteer,alpine,coredump,Docker,Docker Compose,Puppeteer,Alpine,Coredump,我的PHP容器运行Puppeter生成PDF。通过生成PDF文档,它还可以在容器中创建两个核心转储文件。我不确定它们究竟来自哪里 主机/服务器是CentOS 7 我检查了以下内容: 没有应用程序错误日志,Browsershot/Puppeter正在运行,没有错误 在/var/log/messages 我已尝试禁用核心转储 通过执行中的“禁用核心转储”部分,我完成了以下工作: 将以下内容添加到/etc/security/limits.conf 创建了一个disable-core-dumps.sh,

我的PHP容器运行Puppeter生成PDF。通过生成PDF文档,它还可以在容器中创建两个核心转储文件。我不确定它们究竟来自哪里

主机/服务器是CentOS 7

我检查了以下内容:
  • 没有应用程序错误日志,Browsershot/Puppeter正在运行,没有错误
  • /var/log/messages
  • 我已尝试禁用核心转储 通过执行中的“禁用核心转储”部分,我完成了以下工作:

  • 将以下内容添加到
    /etc/security/limits.conf
  • 创建了一个disable-core-dumps.sh,方法是:
    echo“ulimit-c0>/dev/null 2>&1”>/etc/profile.d/disable-coredumps.sh

  • /etc/systemd/coredump.conf

  • 然后重新启动服务器和容器

  • 我还尝试在容器内设置
    ulimit-c0
    (alpine)

  • 以上这些技巧对我都不管用。每次木偶演员生成PDF时,它总是创建两个核心转储文件,如下所示:

    core.131 core.52
    
    核心文件如下所示:


    有人能帮我禁用核心转储吗?非常感谢。

    您必须使用选项
    --ulimit core=0
    启动容器以禁用coredumps

    参考:

    例子 在主机上,临时将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>)
    

    我在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
    

    我认为您需要禁用主机上的核心转储,而不是容器,或者像以前一样运行容器one@LinPy我已经通过以下操作禁用了主机上的核心转储。已尝试在主机和容器上禁用核心转储。如果你想找到这些核心转储的根本原因,而不是让它们失效,那么我建议你多看看木偶演员。由于puppeter使用nodejs,并且coredump中有nodejs模块/lib,因此看起来像是一个有故障的nodejs进程。有一些调试选项可以使用,比如禁用Puppeter的headless模式,或者启用详细日志记录。以下是有关详细信息的链接:。请尝试编辑/etc/security/limits.conf/etc/systemd/coredump.conf insitde容器,例如在描述如何构建image@ahasbini奇怪的是PDF是完美生成的。我启用了调试,但找不到任何有用的东西。只是核心转储。谢谢你的回答。我正在使用compose,并通过将soft和hard设置为0来尝试ulimit配置。但仍然不起作用。docker run-ulimit core=0是否与将compose的ulimit设置为0相同?我认为应该在启动php应用程序的同一命令中将其添加到
    entrypoint.sh
    docker run --rm -it bash
    (inside the container)
    # yes > /dev/null &
    # kill -SIGABRT $(pidof yes)
    # ls /tmp
    (shows core.yes.<pid>)
    
    docker run --ulimit core=0 --rm -it bash
    (inside the container)
    # yes > /dev/null &
    # kill -SIGABRT $(pidof yes)
    # ls /tmp
    (No entries)
    
    services:
        app:
            ulimits:
                core:
                    hard: 0
                    soft: 0