我遇到了 Docker 容器中缺少核心转储的问题。我发现这个问题的根本原因是sudo
重置了该ulimit -c
值:
/$ ulimit -c 80
/$ ulimit -c
80
/$ sudo sh -c 'ulimit -c'
0
/$ sudo sh -c 'ulimit -c 70'
sh: 1: ulimit: error setting limit (Operation not permitted)
这里我在外壳中设置了 ulimit,这个设置是有效的。当我进入外壳时sudo
,ulimit 会被忽略和我无法再次将其设置为其他值。
我发现 EPERM 是由于软限制超出了硬限制,但我也无法更改硬限制。
我尝试的另一件事是配置 limits.conf。我在 dockerfile 中执行此操作以确保其生效:
RUN bash -c "echo 'root soft core 100' |sudo tee /etc/security/limits.conf"
RUN bash -c "echo 'session required pam_limits.so' |sudo tee -a /etc/pam.d/common-session"
但这也没有效果。
添加--privileged
确实docker run
有效,但我不想这样做。
答案1
较新版本sudo
默认将核心大小限制重置为零。要保留以前的值,请将此语句添加到配置中:
Defaults rlimit_core=default