Masalahnya adalah bahwa restart: always kebijakan tampaknya tidak berfungsi saat saya mematikan penampung (mensimulasikan kerusakan aplikasi menggunakan docker kill) dan docker-compose tidak memulai ulang wadah saya, meskipun Kode keluar adalah 137. Saya mengamati perilaku yang sama ketika saya menggunakan restart: on-failure kebijakan. Versi 2 dan 3 dari docker-compose berperilaku sama. Sistem saya adalah Ubuntu Server 16.04 x64.
Pertanyaan saya adalah:
Mengapa docker-compose tidak memulai ulang wadah yang rusak (mati)?
Bagaimana cara memeriksa apakah kebijakan restart berfungsi?
Saat Anda menggunakan docker kill, ini adalah perilaku yang diharapkan karena Docker tidak memulai ulang penampung: "jika Anda menghentikan penampung secara manual, kebijakan mulai ulang diabaikan hingga daemon Docker dimulai ulang atau penampung dimulai ulang secara manual. Ini adalah upaya lain untuk mencegah loop restart" (referensi)
Jika Anda menggunakan docker stop atau docker kill, Anda menghentikan penampung secara manual. Anda dapat melakukan beberapa tes tentang kebijakan restart: restart daemon docker, reboot server Anda, menggunakan CMD di dalam wadah dan menjalankan keluar...
Misalnya jika saya mematikan wadah saya yang digunakan dengan kebijakan restart, saya melihat bahwa itu keluar dengan kode 137 tetapi tidak dimulai ulang menurut docker ps-A, itu tetap keluar:
[root@andromeda ~]# docker ps --allCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES819d1264c30a redis:alpine "docker-entrypoint..." 3 minutes ago Exited (137) 34 seconds ago keepalive_redis_1
Tetapi jika saya me-restart daemon...
[root@andromeda ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES819d1264c30a redis:alpine "docker-entrypoint..." 30 minutes ago Up 2 seconds 6379/tcp keepalive_redis_1
Wadah yang disetel dengan kebijakan restart, dimulai lagi seperti yang dikatakan dokumentasi, jadi docker kill bukanlah cara Anda harus menguji kebijakan restart karena diasumsikan bahwa anda sengaja menghentikan wadah dan Docker ingin memiliki cara untuk mencegah restart loop, jika Anda membunuhnya, Anda benar-benar ingin membunuhnya.
Saya menemukan tautan berikut berharga yang menunjukkan perilaku yang sama dalam versi yang berbeda (jadi ini bukan bug tetapi perilaku yang diharapkan):
Saya ada di sana berkali - kali, tetapi seperti yang anda lihat, dokumentasinya tidak kuat dan tidak ada penjelasan bagaimana fitur ini bekerja, itu sebabnya saya mengajukan pertanyaan-saya ingin melihat jawaban dari seseorang dengan pengalaman langsung di bidang ini.