programing

도커 컨테이너가 빠져나가는 이유를 어떻게 알 수 있습니까?

closeapi 2023. 9. 23. 22:44
반응형

도커 컨테이너가 빠져나가는 이유를 어떻게 알 수 있습니까?

1G RAM 호스트에서 실행되는 도커 컨테이너가 있습니다(같은 호스트에서 실행되는 다른 컨테이너도 있음).이 도커 컨테이너의 응용 프로그램은 메모리를 많이 소모할 수 있는 일부 이미지를 디코딩합니다.

때때로 이 컨테이너는 종료됩니다.메모리 부족으로 인한 것은 아닌지 잘 모르겠습니다.근본 원인을 찾기 위한 방법이 필요합니다.그렇다면 이 컨테이너의 죽음에 무슨 일이 일어났는지 알 수 있는 방법이 있을까요?

다른 사람들은 다음과 같이 언급했습니다.docker logs $container_id애플리케이션의 출력을 확인합니다.이것은 항상 제가 먼저 확인하는 것입니다.

그 다음에, 당신은.docker inspect $container_id상태에 대한 세부 정보 보기(예:

    "State": {
        "Status": "exited",
        "Running": false,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 0,
        "ExitCode": 2,
        "Error": "",
        "StartedAt": "2016-06-28T21:26:53.477229071Z",
        "FinishedAt": "2016-06-28T21:26:53.478066987Z"
    },

여기서 중요한 대사는 "OOMKilled"인데, 컨테이너 메모리 제한을 초과하고 도커가 당신의 앱을 죽이면 참이 됩니다.앱에서 종료 원인을 식별하는지 확인하기 위해 종료 코드를 조회할 수도 있습니다.

이는 도커 자체가 프로세스를 종료하는 경우에만 표시되며, 컨테이너에 메모리 제한을 설정해야 합니다.도커 외부에서 호스트 자체의 메모리가 부족할 경우 리눅스 커널이 프로세스를 종료시킬 수 있습니다.Linux는 종종 /var/log의 로그에 기록합니다.윈도우즈 및 Mac에서 Docker Desktop을 사용하면 내장된 Linux VM에 할당된 메모리를 도커 설정에서 조정할 수 있습니다.

logs를 읽어보면 컨테이너 내부의 공정이 OOM killed 되었는지 여부를 알 수 있습니다.OOM 스킬은 커널에 의해 시작되기 때문에 발생할 때마다 수많은 라인이 생성됩니다./var/log/kern.log, 예를 들어 다음과 같습니다.

python invoked oom-killer: gfp_mask=0x14000c0(GFP_KERNEL), nodemask=(null), order=0, oom_score_adj=995
oom_kill_process+0x22e/0x450
Memory cgroup out of memory: Kill process 31204 (python) score 1994 or sacrifice child
Killed process 31204 (python) total-vm:7350860kB, anon-rss:4182920kB, file-rss:2356kB, shmem-rss:0kB

승인된 답변이 최선의 선택이긴 하지만, 때로는 저널의 내용을 호스트에서 검사하는 것도 유용할 수 있습니다(리눅스에서).

다음을 입력하여 이를 수행할 수 있습니다.

sudo journalctl -u docker

미행하는 것도

sudo journalctl -u docker -f

또는 단자 버퍼에 너무 긴 경우 출력을 더 적게 파이핑합니다.

sudo journalctl -xn -u docker | less

docker inspect -f '{{ .State }}' $container_id8번째 속성인 ExitCode를 확인합니다.

컨테이너의 로그에 접근할 수 없는 경우, 특히 도커 API를 사용할 때 - 예를 들어 다음과 같은 이유로docker.errors.NotFound: 404 Client Error- 컨테이너가 빠져나간 후 자동으로 제거되었기 때문일 수 있습니다.

다음과 같이 컨테이너를 실행하면 발생할 수 있습니다.docker run --rm옵션, 즉:Automatically remove the container when it exits를 더 수 그러면 로그를 더 이상 받을 수 없습니다.

요를 요.--rm.option를) 한 후 할 수 및 하십시오.

언급URL : https://stackoverflow.com/questions/38112968/how-to-know-the-reason-why-a-docker-container-exits

반응형