도커 컨테이너에서 사망 한 주요 프로세스를 조사하는 방법은 무엇입니까?


13

때로는 컨테이너가 멈추었는지, 또는 시작 후 아주 빨리 죽고 멈추는 컨테이너를 조사해야합니다.

docker exec -ti <id> bash 컨테이너가 실행 중일 때만 작동하며 일단 완료되면 bash 프롬프트도 종료됩니다.

함께 docker start컨테이너 다이가 갑자기 다시 컨테이너에 들어갈 시간이 충분하고 조사를하지 않을 경우 다른 명령을 공급하고, 수 없습니다.

우리는 할 수있는 docker commit다음, docker run다른 명령을 사용하여 새 이미지를하지만, 다른 대안이 있는지 궁금하네요.

참고 : docker logs앱이 stdout / stderr에 인쇄 된 모든 것을 반환합니다. 문제가 무엇인지 파악하기에는 충분하지 않을 수 있습니다.


잠시 후 그것에 대해 생각해보십시오 : Docker main process ???? 컨테이너가 하나의 프로세스 만 실행하는 것을 목표로하기 때문에 'main'이라는 용어를 제거하거나 이상한 프로세스 (init 프로세스 실행과 같은)를 수행하거나 스레드를 프로세스로 사용하고 있습니다 ... 옵션 하나, 그러나 그것은 나를 귀찮게하기 때문에 그것을 말해야했다
Tensibai

@ Tensibai 때로는 메인 명령으로 처리 할 수없는 경우 컨테이너에서 pid 1 / 신호 문제를 처리하기 위해 dumb-init와 같은 것을 실행해야합니다. 도커 컨테이너가 둘 이상의 프로세스를 실행하는 다른 경우도있을 수 있습니다.
SztupY

예, 컨테이너가 프로세스를 분리하기 위해 만들어 졌기 때문에 이것이 이상하다고 부릅니다. 때로는 컨테이너가 앱의 솔루션이 아니기 때문에 컨테이너 안에 모든 것을 기꺼이 넣는 것이 다른 무엇보다 두통의 길입니다.
Tensibai

답변:


9

Linux에서 프로세스가 실패한 이유를 추적하는 일반적인 방법이 좋습니다. 그러한 방법 중 하나 strace는 시스템 호출 프로세스가 수행했으며 일반적으로 실패 이유를 알려주 는 프로세스를 사용 하는 것입니다.

Dockerfile다음과 같은 모양을 만들 수 있습니다 .

FROM original_image

RUN apt-get -y update && apt-get install -y strace

# build with `docker build -t debug_version`

그런 다음를 사용하여 새 이미지를 실행하십시오 docker run debug_version strace original_cmd.

자식을 포크 한 다음 죽는 프로세스의 strace경우 -ff옵션 으로 실행하려고합니다 . Docker 데이터 볼륨 을 사용 하여 일부 파일을 매핑하고 -ofrom 옵션을 사용 하여 파일 strace을 쓸 수도 있습니다. 그러나 일반적 strace으로 stdout에 출력을 남겨두고을 사용하여 읽을 수 docker log있습니다.

관련 Q : Linux 프로세스가 신비롭게 종료됩니다


docker commit, 이미지를 시작하려면 중지 된 컨테이너를 먼저 시작해야합니다.
SztupY

당신은 시작시에 죽었다고 말했습니다. 그때 이미지가 있다고 가정합니다. 중지 된 경우에는 커밋이 필요합니다.
Evgeny

컨테이너를 중지하는 시나리오 중 하나
일뿐입니다.

straceAlpine Linux에는 pkgs.alpinelinux.org/package/edge/main/x86_64/strace 패키지도 있습니다 . Alpine 패키지 관리자를 사용하여 설치하십시오 apk install strace.
Evgeny

3

지금까지 내가 알고,로 commit하고 run있다가 죽었을 때 그것이 여기에 가장 좋은 옵션은 당신에게 컨테이너에 대한 전체 액세스 권한을 부여합니다.

이상적으로는 컨테이너가 실패하면 더 유용한 정보를 내놓을 수 있지만 이것이 또 다른 주제입니다.

편집 : 컨테이너가 바로 시작에 죽어 경우, 내 대답을 확장하기 위해, 당신은 또한 사용할 수있는 docker run대체 지정 --entrypointCMD. 일반적으로 이것을 루프 또는 그 자체로 종료되지 않는 것으로 설정합니다. 컨테이너에 들어가면 실패한 단계를 수동으로 실행 한 다음 컨테이너 종료에 대해 걱정할 필요없이 결과를 검사 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.