Eu tenho um contêiner do Docker em execução em um host de 1G RAM (também há outros contêineres em execução no mesmo host). O aplicativo neste contêiner do Docker decodificará algumas imagens, o que pode consumir muito memória.
De vez em quando, esse contêiner sairá. Duvido que seja devido à falta de memória, mas não tenho muita certeza. Preciso de um método para encontrar a causa raiz. Então, há alguma maneira de saber o que aconteceu com a morte desse contêiner?
docker
containers
exit
Li Bin
fonte
fonte
docker logs <container-id>
.Respostas:
Outros mencionaram
docker logs $container_id
para ver a saída do aplicativo. Isso sempre seria minha primeira coisa a verificar.Em seguida, você pode executar um
docker inspect $container_id
para ver os detalhes do estado, por exemplo:A linha importante é "OOMKilled", que será verdadeira se você exceder os limites de memória do contêiner e o Docker encerrar seu aplicativo. Você também pode consultar o código de saída para ver se ele identifica uma causa para a saída de seu aplicativo.
Observe que isso indica apenas se o próprio docker mata seu processo e requer que você defina um limite de memória em seu contêiner. Fora do docker, o kernel do Linux pode lol seu processo se o próprio host ficar sem memória. O Linux geralmente grava em um log em / var / log quando isso acontece. Com o Docker Desktop no Windows e Mac, você pode ajustar a memória alocada para a VM Linux incorporada nas configurações do docker.
fonte
Você pode descobrir se o processo dentro do contêiner foi OOMkilled lendo os logs. OOMkills são iniciados pelo kernel, então cada vez que acontece, há um monte de linhas
/var/log/kern.log
, por exemplo:fonte
Embora a resposta aceita seja a melhor opção, às vezes pode ser útil inspecionar do host o conteúdo do periódico também (no Linux).
Você pode fazer isso digitando:
ou seguindo-o
ou canalizando a saída para menos se for muito longo para o buffer do terminal
fonte