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

9cbw7uwe  于 2023-04-29  发布在  Docker
关注(0)|答案(3)|浏览(250)

我的PHP容器运行puppeteer来生成PDF。通过生成PDF文档,它还在容器中创建了两个核心转储文件。我不知道他们实际上来自哪里。
主机/服务器是CentOS 7。

我检查了:

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

我试过禁用核心转储

通过遵循https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/的Disable core dumps部分,我已经完成了:
1.将以下内容添加到/etc/security/limits.conf

* soft core 0
* hard core 0

1.创建了一个 www.example.com :echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh
1.将以下内容添加到/etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0

1.重启服务器和容器
1.我还尝试在容器中设置ulimit -c 0(alpine)
上面的技巧对我都不起作用。每次puppeteer生成PDF时,它总是创建两个核心转储文件,如下所示:

core.131 core.52

核心文件如下所示:

谁能帮我禁用核心转储?多谢了。

u2nhd7ah

u2nhd7ah1#

您必须使用选项--ulimit core=0启动容器以禁用coredumps。
参考: www.example.com

示例

在主机上,临时将核心转储路径设置为/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)
u5rb5r59

u5rb5r592#

对于使用docker-compose的用户,在.yml文件集ulimits中:

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

t9aqgxwy3#

我在docker swarm服务上也遇到了这个问题,--ulimit core=0在swarm服务中不工作;我使用了下面的命令,它在docker swarm服务中对我有效!

sysctl -w kernel.core_pattern=/dev/null

相关问题