- Menggunakan kebijakan reboot bawaan Docker untuk menangani kegagalan sistem.
- Implementasi skrip kustom dan cron untuk kontainer dengan status tidak sehat.
- Integrasi tingkat lanjut dengan systemd untuk mengontrol urutan startup dan shutdown.
- Alternatif dan alat pemantauan eksternal seperti Podman Quadlet.
Saya yakin ini pernah terjadi pada Anda: Anda memiliki layanan yang berjalan di Buruh pelabuhan yang, karena alasan misterius, macet setiap beberapa hari sekali. Bagaimana cara memulai ulang kontainer Docker secara otomatis ketika berhenti merespons? Sangat menjengkelkan mencoba mengoptimalkan kode atau konfigurasi dan ternyata tidak ada yang berhasil, hanya untuk menyadari bahwa reboot manual sederhana dapat menyelesaikan masalah dan membuat semuanya tetap berjalan selama seminggu lagi. Alih-alih terus-menerus memeriksa waktu, solusi ideal adalah menyiapkan sistem yang melakukan pekerjaan kotor ini untuk Anda.
Mengelola ketersediaan kontainer melibatkan lebih dari sekadar memastikan kontainer tersebut berjalan secara otomatis saat server dinyalakan. pastikan mereka merespons dengan benar terhadap permintaan tersebut. Terkadang kontainer tampak "aktif" bagi Docker, tetapi aplikasi di dalamnya tidak responsif, memaksa kita untuk mencari solusi mulai dari parameter daemon dasar hingga pembuatan layanan kompleks di sistem operasi.
Kebijakan reboot bawaan Docker
Cara paling sederhana untuk memulai ulang kontainer Docker secara otomatis adalah dengan menggunakan flag tersebut. --restart saat meluncurkan kontainer atau menggunakan perintah docker update Jika kontainer sudah dibuat, Docker menawarkan beberapa opsi tergantung pada kebutuhan Anda. Misalnya, kebijakan tersebut. selalu Ini akan menyebabkan kontainer selalu memulai ulang, terlepas dari apakah proses berakhir dengan kesalahan atau jika daemon Docker itu sendiri yang memulai ulang.
Jika Anda lebih menyukai sesuatu yang lebih bersifat pembedahan, kecuali dihentikan Ini adalah pilihan utama bagi banyak orang. Konfigurasi ini identik dengan konfigurasi sebelumnya, kecuali jika Anda menghentikan kontainer secara manual untuk pemeliharaan, Docker tidak akan mencoba untuk menyalakannya. secara otomatis setelah server dihidupkan ulang, dengan tetap menghormati keputusan manual Anda.
Bagi mereka yang hanya ingin bertindak sebagai respons terhadap kegagalan kritis, ada saat gagalKebijakan ini hanya memicu restart jika kontainer berhenti dengan kode keluar bukan nol. Anda bahkan dapat membatasinya dengan menambahkan jumlah percobaan ulang maksimum, mencegah sistem memasuki loop restart tak terbatas jika kesalahan tersebut terus-menerus dan kritis.

Otomatisasi untuk kontainer "tidak sehat"
Di sinilah segalanya menjadi menarik. Terkadang, sebuah kontainer masih menunjukkan status "Up" (aktif), tetapi status kesehatannya berubah. tidak sehat karena gagal dalam pemeriksaan internal. Kebijakan sebelumnya tidak efektif di sini, karena prosesnya secara teknis belum mati. Untuk mengatasi hal ini, kita dapat menerapkan arahan tersebut. PEMERIKSAAN KESEHATAN di dalam Dockerfile atau di dalam file Docker Compose, mendefinisikan sebuah perintah (seperti curl ke port tertentu) untuk memverifikasi bahwa aplikasi merespons.
Setelah pemeriksaan kesehatan disiapkan, kita dapat membuat Skrip Bash yang berjalan setiap beberapa menit menggunakan crontab dari Linux. Skrip ini seharusnya menyaring kontainer yang berada dalam keadaan tertentu. unhealthy atau mereka yang keluar dengan kode kesalahan 128 dan menjalankan docker restart tentang mereka.
Agar hal ini berjalan lancar dan kontainer Docker dapat dimulai ulang secara otomatis, sangat penting bahwa pengguna yang menjalankan cron job memiliki izin yang diperlukan. izin yang dibutuhkan dalam grup dockerDengan cara ini, sistem memantau lingkungan setiap 5 atau 10 menit dan mengaktifkan kembali layanan apa pun yang telah menjadi "zombie", menjamin ketersediaan hampir total tanpa campur tangan manusia.
Integrasi tingkat lanjut dengan systemd
Saat bekerja di lingkungan yang lebih profesional, Anda mungkin menginginkan kontainer Anda berperilaku seperti... layanan Linux asliMengintegrasikan Buruh pelabuhan Systemd memungkinkan Anda mengelola dependensi yang kompleks, seperti memastikan bahwa basis data dimulai sebelum aplikasi web. Hal ini dicapai dengan membuat file. .service di rute /etc/systemd/system/.
Kita bisa mendesain sebuah urutan mematikan dan menghidupkan daya Terkendali. Dengan menggunakan skrip khusus yang terhubung ke systemd, dimungkinkan untuk menghentikan kontainer dalam urutan terbalik dari dependensinya untuk mencegah kerusakan data. Menggunakan tipe oneshot dan mengkonfigurasi targets sesuai (seperti multi-user.target o shutdown.target), server menangani seluruh siklus hidup kontainer.
Opsi ampuh lainnya untuk secara otomatis memulai ulang kontainer Docker ketika berhenti merespons adalah dengan menggunakan flag tersebut. --rm dalam kombinasi dengan systemd. Ini memungkinkan kontainer dihapus saat dihentikan dan kontainer baru dibuat dari image dasar saat startup, memastikan bahwa Kondisi wadah harus selalu bersih dan tidak berubah.mendelegasikan penyimpanan data sepenuhnya ke volume eksternal.

Alat eksternal dan alternatif modern
Jika Anda tidak ingin repot menulis skrip Bash, ada alat pihak ketiga yang tersedia. Ada aplikasi sumber terbuka yang dirancang khusus untuk memulai ulang kontainer berdasarkan jadwal yang telah ditetapkanIni sangat berguna untuk tugas berulang seperti memperbarui sertifikat SSL. Demikian pula, alat-alat seperti Uptime Kuma Fitur-fitur ini memungkinkan Anda untuk memantau kesehatan layanan dari dasbor visual dan mengirimkan notifikasi ke Telegram atau Gotify jika terjadi kesalahan. Semuanya sangat membantu untuk secara otomatis memulai ulang kontainer Docker ketika berhenti merespons.
Bagi mereka yang mencari alternatif yang lebih ringan atau asli, Podman Ini adalah pilihan yang luar biasa. Berkat arsitektur tanpa daemon dan fungsionalitasnya Kembar empatIni memungkinkan Anda membuat file deklaratif sederhana yang secara otomatis dikonversi oleh systemd menjadi layanan yang dioptimalkan, menawarkan integrasi yang jauh lebih organik daripada Docker tradisional.
Memiliki kendali penuh atas siklus hidup layanan Anda melibatkan penggabungan penggunaan kebijakan memulai kembali, pengawasan terus-menerus melalui pemeriksaan kesehatan dan, dalam kasus yang lebih kompleks, dukungan dari sistem atau alat pemantauan agar infrastruktur Anda tangguh dan tidak bergantung pada seseorang yang harus mengingat untuk memulai ulang server secara manual setiap minggu.
Editor yang berspesialisasi dalam isu-isu teknologi dan internet dengan pengalaman lebih dari sepuluh tahun di berbagai media digital. Saya telah bekerja sebagai editor dan pembuat konten untuk perusahaan e-commerce, komunikasi, pemasaran online, dan periklanan. Saya juga menulis di situs web ekonomi, keuangan dan sektor lainnya. Pekerjaanku juga merupakan passionku. Sekarang, melalui artikel saya di Tecnobits, Saya mencoba mengeksplorasi semua berita dan peluang baru yang ditawarkan dunia teknologi kepada kita setiap hari untuk meningkatkan kehidupan kita.