Can’t attach to the process: ptrace(PTRACE_ATTACH, …) failed for 1: Operation not permitted

docker运行的 Tomcat 容器,由于jvm 内存溢出,想要排查,进入到容器内,都无法使用相关命令,如 jmap、jps、jinfo 等命令,都会报出 Can’t attach to the process: ptrace(PTRACE_ATTACH, …) failed for 1: Operation not permitted 这个问题,很是头疼,经过查阅资料,最终得以解决。

这不是什么 docker 或者jmap的Bug,而是 Docker 自 1.10 版本开始加入的安全特性。 jmap 这类 JDK 工具依赖于 Linux 的 PTRACE_ATTACH,而 Docker 自 1.10 版本开始,默认的 seccomp 配置文件中禁用了 ptrace。

解决方案:运行容器时加入对应设置,使容器支持相关命令的使用
–cap-add=SYS_PTRACE

docker run --cap-add=SYS_PTRACE -d -p 8081:8080 -m 800M --memory-swap=1024M --name tomcat_admin -e JAVA_OPTS='-server -Dfile.encoding=UTF-8 -Xms512M -Xmx800M' -v /jbh_services/admin:/usr/local/tomcat/webapps --restart=always tomcat:8.5.63-jdk8-openjdk

原文写的比较详细,转载地址:https://blog.csdn.net/russle/article/details/99708261

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐