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


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대체 지정 --entrypoint및 CMD. 일반적으로 이것을 루프 또는 그 자체로 종료되지 않는 것으로 설정합니다. 컨테이너에 들어가면 실패한 단계를 수동으로 실행 한 다음 컨테이너 종료에 대해 걱정할 필요없이 결과를 검사 할 수 있습니다.

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