Bir liman işçisi konteynerinin neden çıkış yaptığını nasıl anlarım?


112

1G RAM ana bilgisayarında çalışan bir Docker kapsayıcım var (aynı ana bilgisayarda çalışan başka kapsayıcılar da var). Bu Docker konteynerindeki uygulama, belleği çok tüketebilecek bazı görüntülerin kodunu çözecektir.

Zaman zaman bu konteyner çıkacaktır. Hafıza yetersizliğinden kaynaklandığından şüpheliyim ama pek emin değilim. Temel nedeni bulmak için bir yönteme ihtiyacım var. Peki bu konteynerin ölümü için ne olduğunu bilmenin bir yolu var mı?


6
Bu kapsayıcı için günlükleri aracılığıyla kontrol edebilirsiniz docker logs <container-id>.
techtabu

2
ama konteyner çıktı, sanırım artık günlüğe kaydedemiyorum?
Li Bin

Az önce makinemde denedim. Konteynerden çıkmış olsa bile günlüklere yine de erişebilirsiniz.
Samuel Toh

En azından denedin mi?
techtabu

techtabu, evet yaptım. Zaten yardımcı olmuyor
Li Bin

Yanıtlar:


129

Diğerleri docker logs $container_iduygulamanın çıktısını görmekten bahsetti . Bu her zaman kontrol etmem gereken ilk şey olurdu.

Ardından, docker inspect $container_iddurumla ilgili ayrıntıları görüntülemek için a çalıştırabilirsiniz , örneğin:

    "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"
    },

Buradaki önemli satır, kapsayıcı bellek sınırlarını aşarsanız ve Docker uygulamanızı öldürürse doğru olacaktır "OOMKilled". Ayrıca, uygulamanız tarafından çıkış için bir neden tanımlayıp tanımlamadığını görmek için çıkış kodunu da aramak isteyebilirsiniz.

Unutmayın, bu yalnızca docker'ın işleminizi bitirip bitirmediğini gösterir ve konteynerinizde bir bellek sınırı belirlemenizi gerektirir. Docker dışında, Linux çekirdeği, ana bilgisayarın hafızası biterse işleminizi yavaşlatabilir. Bu olduğunda Linux genellikle / var / log oturumuna yazar. Windows ve Mac'te Docker Desktop ile, docker ayarlarında gömülü Linux sanal makinesine ayrılan belleği ayarlayabilirsiniz.


9
Burada anlamıyorum, konteynerim gittiğinden beri "inceleme" nasıl çalışacak? Yukarıdaki tartışmadan, uygulama öldüğünde, kapsayıcı da ölür. Aynı görüntüyü yeniden başlatıp incelemek mi istiyorsunuz?
Li Bin

11
@LiBin bir konteyner öldüğünde silinmez, sadece durum = durdu veya çıkıldı gibi bir durma durumuna geçer. 'docker ps -a' ve kendiniz görün
Samuel Toh

Bellek yoğun bir işlemi her çalıştırdığımda 0'dan çıkış alıyordum ve OOMKilled yanlıştı. Belleğin artması, tekrar çalışmasını sağladı.
Andrei

1
Docker motoru yerine Linux çekirdeği konteynerdeki süreçleri öldürürse bu gerçekleşebilir. Bunu genellikle ana bilgisayarda / var / log altında işletim sistemi günlüklerinde görürsünüz.
BMitch

6

Günlükleri okuyarak konteynerin içindeki sürecin OOMkilled olup olmadığını öğrenebilirsiniz. OOMkill'ler çekirdek tarafından başlatılır, bu nedenle her gerçekleştiğinde bir dizi satır vardır /var/log/kern.log, örneğin:

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

Bu cevap, docker'ın çıkışta yeniden başlatacağı bir konteynerde neyin yanlış olduğunu bulmama yardımcı oldu (docker inspect burada pek yardımcı olmuyor).
m90

2

Kabul edilen cevap en iyi seçenek olsa da, bazen derginin içeriğini sunucudan da incelemek faydalı olabilir (linux üzerinde).

Bunu yazarak yapabilirsiniz:

sudo journalctl -u docker

ya da takip etmek

sudo journalctl -u docker -f

veya terminal tamponunuz için çok uzunsa, çıkışı daha az borulamak

sudo journalctl -xn -u docker | less
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.