코어 파일은 코어 모드에 따라 도커 컨테이너를 이스케이프할 수도 있고 그렇지 않을 수도 있습니다.

코어 파일은 코어 모드에 따라 도커 컨테이너를 이스케이프할 수도 있고 그렇지 않을 수도 있습니다.

저는 도커 초보자인데 최근에 문제가 발생했습니다. 나는 무작위로 인용한다. 몇 년 전 파이퍼메일이것은 이전 질문보다 훨씬 더 우아합니다.

Docker 컨테이너를 실행하는 동안 Linux 시스템에서 다음과 같은 core_pattern 동작을 발견했습니다. 이것이 버그인지는 확실하지 않지만 일관성이 없고 문서화되지 않았습니다.

core_pattern이 호스트에 설정된 경우 컨테이너는 해당 패턴을 관찰하고 사용하여 코어를 덤프합니다(core_pattern이 없는 cgroup당). core(5)에 따라 core_pattern을 설정하면 다음이 가능합니다.

  1. echo "/tmp/cores/core.%e.%p" > /proc/sys/kernel/core_pattern
  2. 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)에 코어를 쓰기로 결정한 경우 해당 경로는 전역 파일 시스템 네임스페이스에서도 평가됩니다.

후자의 동작은 컨테이너가 직접 액세스할 수 없는 코어 파일 디렉터리를 채울 수 있기 때문에 반직관적이고 오류가 발생하기 쉽습니다. 즉, 누군가가 컨테이너에만 액세스할 수 있는 경우 디버깅을 위해 코어에도 액세스할 수 없습니다.

결론을 내리기도 전에 스레드가 종료됩니다.

행동에 왜 이런 차이가 있는 걸까요? 이제 문제가 해결되었습니까? 아니면 지침이 있습니까?

관련 정보