-
TL; DR;
docker 실행 시 --cap-add=SYS_PTRACE 옵션을 붙여서 실행
문제
docker 내에서 jmap 실행시 권한 에러 발생
환경 / 버전:
docker / 스프링에러 코드 :
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 1: Operation not permitted해결
jmap은 자바 메모리 분석을 위해 내부적으로 ptrace 명령어를 사용함
일반적인 리눅스에서는 ptrace_scope 파일을 0으로 수정하여 권한 에러를 해결 가능하나, docker 컨테이너 내부에서는 해당 파일을 변경 불가
docker 실행 시에는 `--cap-add=SYS_PTRACE` 옵션을 붙여서 실행하여 권한문제를 해결
docker run -m 500MB --cap-add=SYS_PTRACE demo \ -version -t demo
- docker에서는 privilege 와 capabilities 를 수정하는 --cap-add, --cap-drop, --privileged 옵션을 제공.
- 이 중에서 --privileged 옵션은 권한을 뭉탱이로 허용
- --cap-add 는 이보다는 세부적으로 허용가능하며 더 권장됨
- https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
참조