도커 컨테이너가 빠져나가는 이유를 어떻게 알 수 있습니까?
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_id
8번째 속성인 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
'programing' 카테고리의 다른 글
ARM에 대한 새로운 리브와 함께 GCC를 교차 컴파일: -march와 같은 GCC 옵션을 지정하는 방법? (0) | 2023.09.28 |
---|---|
WireMock 포트를 보다 동적으로 만들어 테스트 서비스에 사용하려면 어떻게 해야 합니까? (0) | 2023.09.23 |
오라클에서 테이블의 모든 열을 null에서 null로 설정하는 방법 (0) | 2023.09.23 |
jquery에서 모든 ajax 요청을 잡습니다. (0) | 2023.09.23 |
사용자가 읽을 수 있는 형식으로 날짜 형식 지정 (0) | 2023.09.23 |