Liman işçisi konteynırında ölen ana süreç nasıl araştırılır?


13

Bazen, durdurulan bir kabı veya başlattıktan sonra çok hızlı bir şekilde ölüp duran bir kabı araştırmanız gerekir.

docker exec -ti <id> bash sadece çalışan konteynerlerde çalışır, bittikten sonra bash istemi de sona erer.

İle docker startkonteyner ölür aniden tekrar kabın içine almak için yeterli zamana sahip ve soruşturma yapmayacağım eğer size farklı bir komut kaynağı ve olamaz.

Yapabiliriz docker commit, sonra docker runyeni görüntü üzerinde farklı bir komutla, ama başka alternatifler olup olmadığını merak ediyorum.

Not : docker logsstdout / stderr'a yazdırılan uygulamalar ne olursa olsun döndürür. Sorunun ne olduğunu bulmak yeterli olmayabilir.


Bir süre düşündükten sonra: Docker ana süreci ???? Kapsayıcı olarak yalnızca bir işlemi yürütmeyi amaçlayan ya 'ana' terimi kaldırılacaktır ya da garip bir şey yapıyorsunuz (bir başlatma işlemi yürütmek gibi) ya da iş parçacığını süreç olarak alıyorsunuz ... Birinci seçenek, ama bunu söylemek zorundaydım çünkü beni rahatsız ediyor
Tensibai

@Tensibai, ana komutunuz kendisiyle başa çıkamıyorsa, kaplarda pid 1 / sinyalleme sorununu ele almak için bazen aptal init gibi bir şey çalıştırmanız gerekir. Bir docker konteynerinin birden fazla işlemi çalıştırdığı başka durumlar da olabilir
SztupY

Evet, buna garip diyorum, çünkü kaplar bir işlemi izole etmek için yapılmış. Bazen kaplar bir uygulamanın çözümü değildir, her şeyi bir kabın içine koymaya istekli olmak, baş ağrısına her şeyden daha fazla bir yoldur.
Tensibai

Yanıtlar:


9

Linux'taki bir işlemin neden başarısız olduğunu izlemenin genel yolları iyidir. Böyle bir yol, stracesistem çağrıları işleminin yapıldığını ve genellikle bir başarısızlığın nedenini işaret eden bir işlemi çalıştırmaktır .

DockerfileŞuna benzeyen bir tane oluşturabilirsiniz :

FROM original_image

RUN apt-get -y update && apt-get install -y strace

# build with `docker build -t debug_version`

Ardından düğmesini kullanarak yeni resminizi çalıştırın docker run debug_version strace original_cmd.

Çocukları çatallayan (ve sonra ölen) süreçler straceiçin -ffseçenekle çalıştırmak istersiniz . Ayrıca Docker veri birimlerini kullanarak bazı dosyaları eşleyebilir ve bu dosyaya yazma -oseçeneğini kullanabilirsiniz strace. Ancak genel olarak stracekullanarak okunabilir stdout çıktı bırakacaktır docker log.

İlgili S: Linux süreci gizemli bir şekilde sona eriyor


Bu docker commit, başlangıçta durdurulan bir görüntüye sahip olmak için hala
durduğum

Başlangıçta öldüğünü söyledin. Sanırım bir görüntünüz var. Durdurulanlar için, evet bir taahhüt gereklidir.
Evgeny

Bu, durdurulan bir konteyner almak için senaryolardan sadece biri
SztupY

straceAlpine Linux'ta da bir paket var , pkgs.alpinelinux.org/package/edge/main/x86_64/strace . Kurmak için Alpine paket yöneticisini kullanın apk install strace,.
Evgeny

3

Kadarıyla farkındayım, Olarak commitve runvardır o öldüğünde olduğu gibi burada en iyi seçenek size konteyner tam erişim vermek.

İdeal olarak, kabınız başarısız olduğunda daha yararlı bilgiler verebilir, ancak bu tamamen başka bir konudur.

Düzenleme: konteyner baştan üzerinde ölmekte edilirse, benim cevap genişletmek için, ayrıca kullanabilirsiniz docker runalternatif belirtmek için --entrypointve CMD. Genellikle bunu bir döngüye veya kendi başına çıkmayacak bir şeye ayarlayacağım. Kapsayıcıya girdikten sonra, başarısız olan adımları manuel olarak çalıştırabilir ve kapsayıcıdan çıkma konusunda endişelenmeden sonucu inceleyebilirsiniz.

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.