Soru Sistem önyüklemesinde docker kapsayıcılarını otomatik olarak nasıl başlatırım?


Sistem açıldığında docker konteynerlerini otomatik olarak başlatmak için iyi bir yol nedir?

Ubuntu 14.04'te bunun için tercih edilen bir yolu var mı?

Kullandım supervisord geçmişte otomatik olarak web uygulamalarını başlatmak için. Ama bu Docker için doğru olan şey gibi hissetmiyor.


100
2017-10-02 14:25


Menşei




Cevaplar:


Görünüşe göre, Docker kapsayıcılarını otomatik başlatmaya yönelik geçerli yöntem (Docker 1.2'den) kullanmaktır politikaları yeniden başlat. Bu, Docker'ın başlangıçta konteynerin başlatılmasını ve çıkışta konteynerin yeniden başlatılmasının nasıl yönetileceğini kontrol edecektir. Şimdiye kadar 'her zaman' seçeneğini kullandım ve Docker'ın sistemi önyükleme sırasında otomatik olarak başlattığını onaylayabilir:

sudo docker run --restart=always -d myimage

Belgeler Alıntı

Politikaları Yeniden Başlatın Docker'daki --restart işaretini kullanarak şunları yapabilirsiniz   Bir konteynerin nasıl olması gerektiği veya olmaması gerektiği için bir yeniden başlatma politikası belirtin   çıkışta yeniden başlatıldı.

hayır - Çıkarken kabı tekrar çalıştırmayın.

on-failure - Kapsayıcıyı yalnızca sıfır olmayan bir şekilde çıkarsa yeniden başlat   çıkış durumu.

her zaman - Çıkış durumundan bağımsız olarak kabı her zaman yeniden başlatın.

Ayrıca, Docker'ın deneyeceği maksimum süreyi de belirleyebilirsiniz.   başarısızlık ilkesini kullanırken kapsayıcıyı yeniden başlatın. Varsayılan   Docker, kabı yeniden başlatmayı sonsuza kadar deneyecek.

$ sudo docker run --restart=always redis

Bu redis'i çalıştıracak   her zaman bir yeniden başlatma politikası ile konteyner, böylece konteyner   Çıkışlar, Docker yeniden başlatır.

$ sudo docker run --restart=on-failure:10 redis

Bu koşacak   Hata durumunda yeniden başlatma ilkesi ve maksimum bir redis konteyneri   Yeniden başlatma sayısı 10. Redis konteyner sıfır olmayan bir çıkış ile çıkarsa   Bir satırda 10 kattan fazla durum Docker, yeniden başlatmayı denemeye son verecek   konteyner Maksimum yeniden başlatma sınırı sağlamak sadece   başarısızlık ilkesi.


121
2017-12-07 20:18



"her zaman - her zaman kapsayıcıyı çıkış durumundan bağımsız olarak yeniden başlat" biraz kafa karıştırıcı. Konteyneri manuel olarak kapatırsanız / durdurursanız, bu da benim aradığım davranışdır. - w00t
müthiş! teşekkürler, şimdi dene. - zx1986
Not: başka bir politika denir unless-stopped eklendi. Gibi davranır always Ancak kap durdurulursa ve sistem yeniden başlatılırsa veya docker arka planı yeniden başlatılırsa, kap yeniden başlatılmaz. Tüm 4 seçeneğin güzel bir yazımı için buraya bakın blog.codeship.com/... - David Morales
Tabii ki docker daemon bunu desteklemek için otomatik olarak başlamalıdır. - sherrellbc


Docker'ın bu sayfa Bu, upstart ve systemd ile nasıl yapılacağını açıklar. Docker için doğru olan gibi görünmediğine katılıyorum. Çözümleri çalıştırmaktır docker startBu, kapsayıcınızı zaten oluşturduğunuzu varsayar. Yapacağını düşünürdüm docker run --rm son komut dosyasında (bunu yepyeni bir işlem gibi işleme alıp bir görüntüden kapsayıcı) ya da yalnızca docker arka planının önyükleme sırasında kapsayıcıları yeniden başlatmasına izin verin (eğer başka bir şey yapmazsanız varsayılan olarak). Upstart, işlemlerin kolay başlatılmasına / durdurulmasına izin verme avantajına sahiptir, ancak bunu tersanenin başlangıç ​​/ durdurma ile de elde edersiniz!

Bence, kullanıcı komut dosyasını çalıştırabilmeden önce bir kapsayıcıyı (tüm doğru bağlantı noktası / cilt bağlamaları ile) el ile oluşturmaya zorlamak bence garip.


7
2017-10-14 04:49





Ama bu Docker için doğru olan şey gibi hissetmiyor.

Neden olmasın?

Bunun için süpervizörü büyük bir başarı ile kullanıyorum.

Bildiklerinizi kullanın, neyin işe yaradığını kullanın, kolayca idare edebileceğiniz ve anlayabileceğiniz bir şey kullanın.


4
2017-10-02 14:27



Teşekkürler @EEAA .. bu daemon dışı modda çalıştırdığınız anlamına mı geliyor? Bu, onları çalıştırmanız gerektiği anlamına da gelmez --rm ? - Stefan Arentz
Konteynırları ön plan modunda çalıştırıyorum ve süpervizörün stdout / stderr'i yakalamasına izin veriyorum. Emin değilim neden --rm burada alakalı. - EEAA
@EEAA: sorunuz hakkında: Bazı insanlar için docker yerine geçer lxc veya openvz hangi var lxc.start.auto = 1 ve vzctl set --onboot yes. Ayrıca ESXi ve diğer sanallaştırma çözümleri de böyle bir özelliğe sahiptir. Lawrence gibi, böyle bir otomatik başlatma özelliğinin dağıtıma özel bir şekilde uygulanması gerektiğini düşünmüyorum çünkü bir docker kullanıcısı aynı sorunu her platformda aynı bilgi ile çözebilmelidir. - Daniel Alder
Sağda Docker, ana makineyi kapsayıcılardan ayırmak için harika bir yoldur, böylece ana bilgisayara özgü yapılandırma biraz geriye doğru bir adımdır. - nijave