Saya memiliki container Docker yang berjalan di host RAM 1G (ada juga container lain yang berjalan di host yang sama). Aplikasi dalam kontainer Docker ini akan mendekode beberapa gambar, yang mungkin menghabiskan banyak memori.
Dari waktu ke waktu, penampung ini akan keluar. Saya ragu itu karena kehabisan memori tetapi tidak terlalu yakin. Saya membutuhkan metode untuk menemukan akar masalahnya. Jadi adakah cara untuk mengetahui apa yang terjadi dengan kematian wadah ini?
docker
containers
exit
Li Bin
sumber
sumber
docker logs <container-id>
.Jawaban:
Orang lain telah menyebutkan
docker logs $container_id
untuk melihat keluaran aplikasi. Ini akan selalu menjadi hal pertama yang saya periksa.Selanjutnya, Anda dapat menjalankan
docker inspect $container_id
untuk melihat detail tentang status, misalnya:Baris penting ada "OOMKilled" yang akan menjadi true jika Anda melebihi batas memori container dan Docker membunuh aplikasi Anda. Anda mungkin juga ingin mencari kode keluar untuk melihat apakah itu mengidentifikasi penyebab keluarnya aplikasi Anda.
Catatan, ini hanya menunjukkan jika buruh pelabuhan itu sendiri menghentikan proses Anda, dan mengharuskan Anda telah menetapkan batas memori pada penampung Anda. Di luar buruh pelabuhan, kernel Linux dapat melemahkan proses Anda jika host itu sendiri kehabisan memori. Linux sering menulis ke log in / var / log saat ini terjadi. Dengan Docker Desktop di Windows dan Mac, Anda dapat menyesuaikan memori yang dialokasikan ke VM Linux tertanam di pengaturan buruh pelabuhan.
sumber
Anda dapat mengetahui apakah proses di dalam wadah telah OOMkilled dengan membaca log. OOMkills diprakarsai oleh kernel sehingga setiap kali itu terjadi ada banyak baris
/var/log/kern.log
, misalnya:sumber
Meskipun jawaban yang diterima adalah pilihan terbaik, terkadang akan berguna untuk memeriksa konten jurnal juga dari host (di linux).
Anda dapat melakukannya dengan mengetik:
atau membuntutinya
atau menyalurkan output ke lebih sedikit jika terlalu panjang untuk buffer terminal Anda
sumber