Mam kontener Docker działający na hoście 1G RAM (są też inne kontenery działające na tym samym hoście). Aplikacja w tym kontenerze Dockera będzie dekodować niektóre obrazy, które mogą zużywać dużo pamięci.
Od czasu do czasu ten pojemnik się opuści. Wątpię, czy jest to spowodowane brakiem pamięci, ale nie jestem pewien. Potrzebuję metody, aby znaleźć główną przyczynę. Czy jest jakiś sposób, aby dowiedzieć się, co się stało ze śmiercią tego pojemnika?
docker
containers
exit
Li Bin
źródło
źródło
docker logs <container-id>
.Odpowiedzi:
Inni wspominali
docker logs $container_id
o wyświetlaniu danych wyjściowych aplikacji. To zawsze będzie moja pierwsza rzecz do sprawdzenia.Następnie możesz uruchomić,
docker inspect $container_id
aby wyświetlić szczegółowe informacje o stanie, np .:Ważnym wierszem jest „OOMKilled”, który będzie prawdziwy, jeśli przekroczysz limity pamięci kontenera, a Docker zabije Twoją aplikację. Możesz również wyszukać kod zakończenia, aby sprawdzić, czy identyfikuje on przyczynę wyjścia przez Twoją aplikację.
Uwaga, to wskazuje tylko wtedy, gdy sam docker zabija twój proces i wymaga ustawienia limitu pamięci w kontenerze. Poza dockerem jądro Linuksa może lolować twój proces, jeśli samemu hostowi zabraknie pamięci. Linux często zapisuje w dzienniku / var / log, kiedy tak się dzieje. Dzięki Docker Desktop w systemie Windows i Mac można dostosować pamięć przydzieloną do osadzonej maszyny wirtualnej z systemem Linux w ustawieniach platformy Docker.
źródło
Możesz dowiedzieć się, czy proces wewnątrz kontenera zakończył się niepowodzeniem, czytając dzienniki. OOMkills są inicjowane przez jądro, więc za każdym razem, gdy to się dzieje, jest kilka linii
/var/log/kern.log
, na przykład:źródło
Chociaż zaakceptowana odpowiedź jest najlepszą opcją, czasami może być przydatne sprawdzenie zawartości czasopisma również od gospodarza (w systemie Linux).
Możesz to zrobić wpisując:
lub śledzenie go
lub potokiem wyjście do mniej, jeśli jest za długi dla twojego bufora terminala
źródło