Docker menyediakan opsi kebijakan mulai ulang untuk memungkinkan penampung Anda memulai ulang secara otomatis jika terjadi peristiwa atau kegagalan tertentu.
Ini sangat membantu dalam skenario di mana Anda harus memulai ulang host Docker (server Linux Anda) atau jika layanan yang berjalan di wadah gagal.
Kebijakan restart Docker diterapkan pada basis per-kontainer. Ada dua cara untuk menetapkan kebijakan mulai ulang ke penampung. Anda dapat mengaturnya di file YAML jika Anda akan menggunakan Docker Compose atau Swarm atau Kubernetes.
Anda juga dapat menyetel kebijakan mulai ulang secara langsung di baris perintah saat menjalankan penampung:
docker container run --restart <policy>
Mari kita bicara tentang jenis kebijakan mulai ulang yang dapat Anda gunakan.
Kebijakan restart Docker
Ada kebijakan restart berikut untuk kontainer Docker:
- tidak:Perilaku default adalah tidak memulai container secara otomatis
- selalu:Selalu mulai ulang penampung yang dihentikan kecuali jika penampung dihentikan secara eksplisit
- kecuali-dihentikan:Mulai ulang wadah kecuali jika wadah dalam keadaan berhenti sebelum daemon Docker dihentikan (dijelaskan nanti)
- saat gagal:Mulai ulang penampung jika keluar dengan kode keluar bukan nol atau jika daemon buruh pelabuhan dimulai ulang
Seperti yang saya sebutkan, jika Anda tidak secara eksplisit menambahkan kebijakan mulai ulang, itu berjalan dengan "tidak", yang berarti wadah tidak akan dimulai ulang secara otomatis.
Menjelaskan kebijakan restart Docker dengan contoh
Biarkan saya menunjukkan kebijakan ini dalam tindakan sehingga Anda benar-benar dapat memvisualisasikannya. Ini sangat berguna untuk memahami perbedaan antara always
dan unless-stopped
kebijakan.
Selalu mulai ulang kebijakan
Mari kita mulai dengan always
memulai kembali kebijakan. Dengan set kebijakan ini, penampung akan selalu dimulai ulang kecuali dihentikan secara eksplisit.
Saya akan menjalankan wadah Alpine Linux dengan always
memulai kembali kebijakan. Saya menamakannya selalu-kebijakan.
Wadah memiliki satu tugas. Ini menjalankan perintah bash sleep selama 10 detik dan kemudian keluar.
docker container run --name always-policy --restart always alpine sleep 10
Tanpa always
restart kebijakan, wadah akan berhenti setelah 10 detik. Tapi di sini, itu akan restart secara otomatis dan menjalankan perintah sleep selama 10 detik dan terus seperti ini.
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1171dcfb7e06 alpine "sleep 10" 25 seconds ago Up 4 seconds always-policy
Anda dapat melihat pada perintah di atas bahwa meskipun container telah dibuat 25 detik yang lalu, container tersebut baru aktif selama 4 detik. Harap diingat bahwa penampung yang sama dimulai ulang, penampung baru tidak dibuat.
Anda dapat menggunakan perintah inspeksi buruh pelabuhan untuk melihat berapa kali wadah telah dimulai ulang sejauh ini.
[email protected]:~$ docker inspect always-policy | grep -i restartcount
"RestartCount": 4,
Jika Anda menghentikan wadah dengan perintah stop, itu tidak akan restart secara otomatis setelahnya. Anda mungkin melihat pada contoh di bawah ini bahwa penampung sekarang memiliki status 'Keluar', bukan Naik.
[email protected]:~$ docker stop always-policy
always-policy
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1171dcfb7e06 alpine "sleep 10" 58 seconds ago Exited (0) 6 seconds ago always-policy

Saya telah menggunakan -it
opsi untuk menjalankan wadah dengan terminal interaktif di tangkapan layar di atas. Itu di luar kebiasaan dan tidak perlu di sini.
kecuali-stopped vs always restart policy
unless-stopped
mirip dengan always
memulai kembali kebijakan. Keduanya memulai ulang penampung secara otomatis dan jika Anda menghentikan penampung secara eksplisit, penampung tidak memulai ulang.
Tetapi perbedaan utama antara keduanya adalah jika Anda menghentikan kontainer dengan perintah docker stop dan kemudian me-restart daemon buruh pelabuhan, wadah dengan always
kebijakan restart akan memulai penampung secara otomatis tetapi penampung dengan unless-stopped
kebijakan tidak akan dimulai ulang.
Mari saya tunjukkan dengan contoh. Saya sudah memiliki wadah yang dihentikan dengan kebijakan selalu mulai ulang. Izinkan saya membuat penampung baru bernama kecuali-kebijakan-dihentikan dengan unless-stopped
kebijakan.
docker container run --name unless-stopped-policy --restart always alpine sleep 10
Hentikan wadah:
docker stop unless-stopped-policy
Sekarang saya memiliki dua kontainer yang secara eksplisit dihentikan:
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d244b6e08899 alpine "sleep 10" 2 minutes ago Exited (0) About a minute ago unless-stopped-policy
1171dcfb7e06 alpine "sleep 10" 22 minutes ago Exited (0) 21 minutes ago always-policy
Mulai ulang daemon Docker:
sudo systemctl restart docker
Sekarang jika Anda memeriksa container yang sedang berjalan, Anda dapat melihat bahwa container bernama always-policy sedang berjalan karena disetel dengan always
mulai ulang kebijakan.
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1171dcfb7e06 alpine "sleep 10" 30 minutes ago Up 8 seconds always-policy
Seluruh langkah dapat dilihat di tangkapan layar ini:

kebijakan mulai ulang saat gagal
on-failure
kebijakan restart memulai ulang wadah jika keluar dengan kode keluar bukan nol (menunjukkan kesalahan/kegagalan). Itu juga memulai ulang wadah jika daemon buruh pelabuhan dimulai ulang termasuk yang sebelumnya dalam keadaan berhenti.
Jika Anda menghentikan container secara manual dengan perintah docker stop, container tersebut ada dengan kode nol yang menunjukkan bahwa semuanya normal.
Menyetel kebijakan mulai ulang di file Tulis Docker
Sekarang, Anda memiliki ide yang cukup bagus tentang menjalankan penampung dengan kebijakan mulai ulang.
Jika Anda menggunakan sesuatu seperti Docker Compose untuk men-deploy container, Anda dapat menyebutkan kebijakan restart untuk objek layanan dalam file YAML.
Berikut ini contoh contoh:
version: "3.3"
services:
NginxProxy:
image: "jwilder/nginx-proxy:latest"
restart: "on-failure"
networks: ["net"]
ports:
- "80:80"
- "443:443"
Kebijakan restart Docker mana yang akan digunakan?
Sejujurnya, tidak ada jawaban langsung untuk pertanyaan ini. Itu tergantung pada kasus penggunaan Anda dan apa yang Anda inginkan.
Saya harap artikel ini bermanfaat untuk memahami kebijakan restart Docker. Jika Anda memiliki pertanyaan atau saran, beri tahu saya di bagian komentar.