Docker memberi Anda beberapa opsi untuk mengelola siklus hidup container Anda. Kontainer biasanya tidak memulai ulang secara otomatis setelah dihentikan. Dengan kebijakan mulai ulang, Anda dapat mengontrol siklus hidup container individual.
Kebijakan mulai ulang akan digunakan setiap kali penampung berhenti berjalan. Docker juga melihat kebijakan restart ketika daemon dijalankan. Anda dapat menggunakan mekanisme ini untuk membawa container ke host Anda setelah reboot.
Kebijakan yang Tersedia
Saat ini ada empat kebijakan mulai ulang yang berbeda:
no
– Kebijakan ini tidak akan pernah secara otomatis memulai penampung. Ini adalah kebijakan default untuk semua container yang dibuat dengandocker run
.always
– Docker akan memastikan container selalu berjalan. Jika wadah berhenti, itu akan segera dimulai ulang. Anda masih dapat menghentikan container secara manual dengandocker stop
tetapi Docker akan memunculkannya kembali saat daemon dimulai ulang.on-failure
– Wadah akan dimulai ulang jika berhenti karena kesalahan. Docker tidak akan memunculkan container setelah daemon dimulai ulang.unless-stopped
– Fungsinya mirip denganalways
. Perbedaannya adalah Docker tidak akan pernah memulai ulang penampung jika telah dihentikan secara manual.
Anda biasanya akan menggunakan salah satu dari tiga opsi terakhir untuk beban kerja produksi. Karena wadah Docker sering digunakan untuk layanan latar belakang yang berjalan lama, Anda biasanya ingin mereka memulai ulang setiap kali terjadi kesalahan. no
kebijakan yang paling cocok untuk penggunaan pembangunan lokal. Ini juga berguna untuk wadah utilitas yang menjalankan satu executable dan kemudian dihentikan.
Mungkin sulit untuk memutuskan kebijakan restart mana yang akan digunakan. always
seringkali merupakan pilihan paling alami tetapi perilaku restart daemon dapat dengan mudah diabaikan. Jika Anda ingin container tetap berhenti secara andal setelah Anda menjalankan docker stop
, Anda harus menggunakan unless-stopped
.
Docker mendeteksi kesalahan berdasarkan kode keluar yang dipancarkan dari proses latar depan container. Kode keluar 1
atau lebih tinggi ditafsirkan sebagai kesalahan. Ini cocok dengan penanganan kode keluar Unix, di mana hanya 0
mewakili eksekusi yang berhasil.
Saat Docker me-restart container Anda, itu sama dengan menjalankan docker run
lagi. Itu berarti ENTRYPOINT
gambar itu skrip akan dipanggil. Sistem bootstrap harus selalu tahan terhadap beberapa pemanggilan.
Menerapkan Kebijakan Mulai Ulang
Anda dapat memulai container dengan kebijakan restart tertentu dengan meneruskan --restart
tandai ke docker run
:
docker run --name httpd --restart always httpd:latest
Jika Anda menggunakan Docker Compose, tambahkan restart
ke docker-compose.yml
. Anda :
services: httpd: image: httpd:latest restart: always
Anda dapat mengubah kebijakan restart container yang ada menggunakan docker update
. Berikan nama wadah ke perintah. Anda dapat menemukan nama container dengan menjalankan docker ps -a
.
docker update --restart-policy unless-stopped httpd
Anda dapat menggunakan docker update
dengan container yang sedang berjalan atau berhenti.
Mulai Ulang Perulangan
Docker menyertakan beberapa perlindungan terhadap loop restart terus-menerus. Yang pertama adalah penundaan waktu wajib sebelum kebijakan restart diaktifkan. Docker tidak akan mulai memantau restart sampai container telah berjalan setidaknya selama 10 detik. Ini mencegah penampung yang gagal untuk memulai ulang secara terus-menerus.
Perilaku spesialis lainnya menyangkut docker stop
memerintah. Docker akan selalu menghormati penggunaan docker stop
, sehingga container tidak langsung restart setelah Anda menjalankan perintah. Jika Anda benar-benar ingin me-restart container, gunakan docker restart
sebagai gantinya.
Membatasi Percobaan Ulang Ulang
on-failure
kebijakan mulai ulang memungkinkan Anda menentukan berapa banyak percobaan ulang yang harus dilakukan. Docker akan menyerah dan meninggalkan wadah dalam keadaan berhenti jika gagal untuk memulai beberapa kali berturut-turut.
docker run httpd:latest --restart on-failure:5
Dalam contoh ini, Docker akan mencoba me-restart container lima kali setelah kegagalan (kode keluar bukan nol). Jika penampung gagal untuk memulai pada upaya kelima, tidak ada lagi percobaan yang akan dilakukan. Opsi ini berguna untuk kontainer di mana kesalahan awal yang terus-menerus tidak mungkin diselesaikan tanpa intervensi manual.
Menyelidiki Mengapa Kontainer Berhenti
Jika Anda perlu mengetahui mengapa sebuah container berhenti, jalankan docker ps -a
. Ini akan menampilkan detail semua container Anda, apakah berhenti atau berjalan. Temukan wadah target dan lihat di kolom "Status". Untuk kontainer yang dihentikan, kode keluar akan ditampilkan dalam tanda kurung. Jika kode lebih besar dari nol, penampung dihentikan karena kesalahan.
Anda harus merujuk ke dokumentasi untuk proses yang berjalan di wadah untuk menentukan arti dari kode kesalahan individual. Namun, Anda sering kali bisa mendapatkan wawasan tentang penyebab error dengan mengambil log container. Log tetap tersedia setelah penampung dihentikan.
docker logs my-container
Aliran log menggabungkan output standar penampung dan aliran kesalahan standar. Jika kesalahan telah dicatat, Anda akan melihatnya di beberapa baris keluaran terakhir.
Ringkasan
Kebijakan mulai ulang membantu memastikan wadah Docker Anda ada saat Anda membutuhkannya. Default no
kebijakan tidak cocok untuk sebagian besar beban kerja produksi. Anda tidak ingin kontainer Anda tetap berhenti jika rusak!
Penggunaan salah satu dari tiga kebijakan yang dapat memulai ulang membuat container Anda lebih tahan terhadap boot ulang perangkat keras dan penghentian yang tidak terduga. Docker akan menjaga ketersediaan layanan jika terjadi crash container.