저는 도커 초보자인데 최근에 문제가 발생했습니다. 나는 무작위로 인용한다. 몇 년 전 파이퍼메일이것은 이전 질문보다 훨씬 더 우아합니다.
Docker 컨테이너를 실행하는 동안 Linux 시스템에서 다음과 같은 core_pattern 동작을 발견했습니다. 이것이 버그인지는 확실하지 않지만 일관성이 없고 문서화되지 않았습니다.
core_pattern이 호스트에 설정된 경우 컨테이너는 해당 패턴을 관찰하고 사용하여 코어를 덤프합니다(core_pattern이 없는 cgroup당). core(5)에 따라 core_pattern을 설정하면 다음이 가능합니다.
- echo "/tmp/cores/core.%e.%p" > /proc/sys/kernel/core_pattern
- echo "|/bin/custom_core /tmp/cores/ %e %p " > /proc/sys/kernel/core_pattern
전자 모드는 컨테이너의 파일 시스템 네임스페이스에서 /tmp/cores 경로를 평가합니다. 이는 호스트가 /tmp/cores의 코어 파일을 볼 수 없음을 의미합니다.
그러나 후자는 전역 파일 시스템 네임스페이스의 /bin/custom_core 경로를 평가합니다. 또한 /bin/core가 경로(이 경우 custom_core의 인수로 표시된 /tmp/cores)에 코어를 쓰기로 결정한 경우 해당 경로는 전역 파일 시스템 네임스페이스에서도 평가됩니다.
후자의 동작은 컨테이너가 직접 액세스할 수 없는 코어 파일 디렉터리를 채울 수 있기 때문에 반직관적이고 오류가 발생하기 쉽습니다. 즉, 누군가가 컨테이너에만 액세스할 수 있는 경우 디버깅을 위해 코어에도 액세스할 수 없습니다.
결론을 내리기도 전에 스레드가 종료됩니다.
행동에 왜 이런 차이가 있는 걸까요? 이제 문제가 해결되었습니까? 아니면 지침이 있습니까?