- Docker'ın yerleşik yeniden başlatma politikalarını kullanarak sistem arızalarını giderme.
- Sağlıksız durumdaki konteynerler için özel komut dosyalarının ve cron'un uygulanması.
- Başlatma ve kapatma sırasını kontrol etmek için systemd ile gelişmiş entegrasyon.
- Podman Quadlet gibi harici izleme alternatifleri ve araçları.
Eminim bu sizin de başınıza gelmiştir: bir servis çalışıyor... Liman işçisi Bu durum, gizemli nedenlerle, birkaç günde bir takılıp kalıyor. Docker konteyneri yanıt vermeyi durdurduğunda otomatik olarak nasıl yeniden başlatılır? Kod veya yapılandırmaları optimize etmeye çalışıp hiçbir şeyin işe yaramadığını görmek, ardından basit bir manuel yeniden başlatmanın sorunu çözdüğünü ve her şeyin bir hafta daha çalışmaya devam ettiğini fark etmek oldukça sinir bozucu. Sürekli saati kontrol etmek yerine, ideal çözüm bu zahmetli işi sizin için yapan bir sistem kurmaktır.
Konteynerlerin kullanılabilirliğini yönetmek, sunucu açıldığında otomatik olarak başlamalarını sağlamaktan daha fazlasını içerir. doğru yanıt vermelerini sağlayın. İsteklere yanıt olarak bazen konteyner Docker için "canlı" görünse de içindeki uygulama yanıt vermez; bu da bizi temel daemon parametrelerinden işletim sisteminde karmaşık servisler oluşturmaya kadar çeşitli çözümler aramaya zorlar.
Docker'ın yerel yeniden başlatma politikaları
Bir Docker konteynerini otomatik olarak yeniden başlatmanın en basit yolu, bayrağı kullanmaktır. --restart Bir konteyner başlatırken veya komutu kullanırken docker update Eğer konteyner zaten oluşturulmuşsa, Docker ihtiyaçlarınıza bağlı olarak çeşitli seçenekler sunar. Örneğin, politika Her zaman Bu durum, işlemin bir hatayla sonlanıp sonlanmadığına veya Docker daemon'unun kendisinin yeniden başlatılıp başlatılmadığına bakılmaksızın, konteynerin her zaman yeniden başlatılmasına neden olacaktır.
Daha cerrahi bir yöntem tercih ediyorsanız, durdurulmadığı sürece Bu, birçok kişi için en iyi seçimdir. Bu yapılandırma, bir öncekiyle aynıdır, tek farkı konteyneri bakım için manuel olarak durdurmanız durumunda ortaya çıkan farklılıktır. Docker bunu açmaya çalışmayacak. Sunucu yeniden başlatıldıktan sonra, manuel kararınıza saygı duyarak otomatik olarak çalışır.
Sadece kritik başarısızlıklara yanıt olarak harekete geçmek isteyenler için, arıza durumundaBu politika, yalnızca kapsayıcı sıfır olmayan bir çıkış koduyla sonlandığında yeniden başlatmayı tetikler. Hatta maksimum yeniden deneme sayısı ekleyerek bunu sınırlayabilir ve hatanın kalıcı ve kritik olması durumunda sistemin sonsuz bir yeniden başlatma döngüsüne girmesini engelleyebilirsiniz.

"Sağlıksız" konteynerler için otomasyon
İşte işler burada ilginçleşiyor. Bazen bir konteyner hala "Çalışıyor" (açık) olarak görünse de sağlık durumu farklıdır. sağlıksız Çünkü iç kontrollerden geçemiyor. Önceki politikalar burada etkisiz kalıyor, çünkü süreç teknik olarak ölü değil. Bunu çözmek için yönergeyi uygulayabiliriz. SAĞLIK KONTROLÜ Dockerfile veya Docker Compose dosyasında bir komut tanımlamak (örneğin bir curl Uygulamanın yanıt verip vermediğini doğrulamak için (belirli bir porta) bağlantı kurun.
Sağlık kontrolünü ayarladıktan sonra, bir tane oluşturabiliriz. Bash betiği her birkaç dakikada bir çalışan crontab Linux'tan. Bu betik, belirli bir durumda olan konteynerleri filtrelemelidir. unhealthy veya 128 hata koduyla çıkış yapan ve bir işlem çalıştıranlar docker restart Onlar hakkında.
Bunun sorunsuz çalışması ve bir Docker konteynerinin otomatik olarak yeniden başlatılması için, cron işini çalıştıran kullanıcının gerekli izinlere sahip olması şarttır. Docker grubunda gerekli izinlerBu sayede sistem, ortamı her 5 veya 10 dakikada bir izler ve "zombi" durumuna geçen tüm hizmetleri devreye alarak insan müdahalesi olmadan neredeyse tam kullanılabilirlik sağlar.
systemd ile gelişmiş entegrasyon
Daha profesyonel ortamlarda çalışırken, konteynerlerinizin şu şekilde davranmasını isteyebilirsiniz: yerel Linux hizmetleriEntegre et Liman işçisi Systemd, veritabanının web uygulamasından önce başlamasını sağlamak gibi karmaşık bağımlılıkları yönetmenize olanak tanır. Bu, dosyalar oluşturularak gerçekleştirilir. .service rotada /etc/systemd/system/.
Biz tasarlayabiliriz kapatma ve açma sırası Kontrollü. systemd'ye bağlı özel komut dosyaları kullanılarak, veri bozulmasını önlemek için konteynerleri bağımlılıklarının ters sırasına göre durdurmak mümkündür. Türü kullanarak oneshot ve yapılandırmak targets uygun (örneğin) multi-user.target o shutdown.targetSunucu, konteynerin tüm yaşam döngüsünü yönetir.
Bir Docker konteynerinin yanıt vermeyi durdurduğunda otomatik olarak yeniden başlatılması için bir diğer güçlü seçenek de bayrağı kullanmaktır. --rm systemd ile birlikte kullanıldığında, konteynerin durdurulması üzerine kaldırılması ve başlatma sırasında temel imajdan yeni bir konteyner oluşturulması sağlanır; bu da şunları garanti eder: Kabın her zaman temiz ve değiştirilmemiş olması gerekir.Veri kalıcılığını tamamen harici depolama birimlerine devretmek.

Harici araçlar ve modern alternatifler
Bash betikleri yazmakla uğraşmak istemiyorsanız, üçüncü taraf araçlar mevcuttur. Özellikle konteynerleri yeniden başlatmak için tasarlanmış açık kaynaklı uygulamalar bulunmaktadır. belirlenmiş programBu, SSL sertifikalarını yenilemek gibi tekrarlayan görevler için çok kullanışlıdır. Benzer şekilde, aşağıdaki gibi araçlar da işe yarar: Uptime Kuma Bu araçlar, görsel bir kontrol panelinden hizmetlerin durumunu izlemenize ve bir sorun oluştuğunda Telegram veya Gotify'a bildirim göndermenize olanak tanır. Ayrıca, bir Docker konteynerinin yanıt vermeyi durdurduğunda otomatik olarak yeniden başlatılması için de oldukça faydalıdırlar.
Daha hafif veya yerel bir alternatif arayanlar için, Podman Mükemmel bir seçenek. Arka planda çalışan servislerden bağımsız mimarisi ve işlevselliği sayesinde... DörtlüBu sayede, systemd'nin otomatik olarak optimize edilmiş hizmetlere dönüştürdüğü basit bildirimsel dosyalar oluşturabilirsiniz; bu da geleneksel Docker'a kıyasla çok daha organik bir entegrasyon sağlar.
Hizmetlerinizin yaşam döngüsü üzerinde tam kontrol sahibi olmak, aşağıdakilerin birleştirilmesini gerektirir: yeniden başlatma politikaları, sürekli gözetim yoluyla sağlık kontrolleri ve daha karmaşık durumlarda, desteği systemd veya izleme araçları Böylece altyapınız sağlam olur ve birinin her hafta sunucuyu manuel olarak yeniden başlatmayı hatırlamasına bağlı kalmaz.
Farklı dijital mecralarda on yıldan fazla deneyime sahip, teknoloji ve internet konularında uzmanlaşmış editör. E-ticaret, iletişim, online pazarlama ve reklam şirketlerinde editör ve içerik yaratıcısı olarak çalıştım. Ekonomi, finans ve diğer sektörlerin internet sitelerinde de yazılar yazdım. İşim aynı zamanda tutkumdur. Artık makalelerim aracılığıyla Tecnobits, Hayatlarımızı iyileştirmek için teknoloji dünyasının bize her gün sunduğu tüm haberleri ve yeni fırsatları keşfetmeye çalışıyorum.