如何在 docker 容器中禁用核心文件转储
How to disable core file dumps in docker container
我的 PHP 容器运行 puppeteer 来生成 PDF。通过生成 PDF 文档,它还在我的容器中创建了两个核心转储文件。我不确定它们实际上来自哪里。
host/server是CentOS 7。
我检查了以下内容:
- 没有应用程序错误日志,Browsershot/puppeteer 运行 没有错误。
- 在
/var/log/messages
中未找到错误日志(例如段错误)
我试过禁用核心转储
按照 https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ 的禁用核心转储部分,我完成了:
- 将以下内容添加到
/etc/security/limits.conf
* soft core 0
* hard core 0
通过以下方式创建了禁用核心-dumps.sh:echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh
将以下内容添加到 /etc/systemd/coredump.conf
[Coredump]
Storage=none
ProcessSizeMax=0
并且重启服务器和容器。
我也试过在容器内设置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
我的 PHP 容器运行 puppeteer 来生成 PDF。通过生成 PDF 文档,它还在我的容器中创建了两个核心转储文件。我不确定它们实际上来自哪里。
host/server是CentOS 7。
我检查了以下内容:
- 没有应用程序错误日志,Browsershot/puppeteer 运行 没有错误。
- 在
/var/log/messages
中未找到错误日志(例如段错误)
我试过禁用核心转储
按照 https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ 的禁用核心转储部分,我完成了:
- 将以下内容添加到
/etc/security/limits.conf
* soft core 0
* hard core 0
通过以下方式创建了禁用核心-dumps.sh:
echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh
将以下内容添加到
/etc/systemd/coredump.conf
[Coredump]
Storage=none
ProcessSizeMax=0
并且重启服务器和容器。
我也试过在容器内设置
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