Saya memiliki file komposisi buruh pelabuhan dengan PostgreSQL dan aplikasi saya, seperti ini:
version: '3'
services:
postgresql:
image: postgres:9.6.6
ports:
- 9932:5432
expose:
- "5432"
environment:
- POSTGRES_PASSWORD=pass
restart: always
volumes:
- /data:/var/lib/postgresql/data
myapp:
image: myapp
links:
- postgresql
depends_on:
- "postgresql"
restart: always
ports:
- "5000:5000"
Masalahnya adalah bahwa restart: always
kebijakan tampaknya tidak berfungsi ketika saya membunuh kontainer (mensimulasikan penggunaan aplikasi 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
komposisi buruh pelabuhan berperilaku sama. Sistem saya adalah Ubuntu Server 16.04 x64.
Pertanyaan saya adalah:
- Mengapa docker-compose tidak memulai ulang wadah yang jatuh (terbunuh)?
- Bagaimana cara memeriksa apakah kebijakan restart berfungsi?
docker
docker-compose
Marcin Zablocki
sumber
sumber
Jawaban:
Ketika Anda menggunakan buruh pelabuhan, ini adalah perilaku yang diharapkan karena Docker tidak memulai ulang wadah: "Jika Anda menghentikan wadah secara manual, kebijakan mulai ulangnya diabaikan sampai daemon Docker dimulai ulang atau wadah dimulai ulang secara manual. Ini adalah upaya lain untuk mencegah loop restart " (referensi)
Jika Anda menggunakan buruh pelabuhan atau buruh pelabuhan, Anda menghentikan wadah secara manual. Anda dapat melakukan beberapa tes tentang me-restart kebijakan: me-restart daemon buruh pelabuhan, me-reboot server Anda, menggunakan CMD di dalam sebuah wadah dan menjalankan ...
Sebagai contoh jika saya membunuh kontainer saya yang digunakan dengan kebijakan restart, saya melihat bahwa itu keluar dengan kode 137 tetapi tidak restart sesuai dengan buruh pelabuhan ps -a, itu tetap keluar:
Tetapi jika saya me-restart daemon ...
Wadah yang ditetapkan dengan kebijakan mulai ulang, dimulai lagi seperti yang dikatakan dokumentasi, jadi buruh pelabuhan tidak seperti Anda harus menguji kebijakan mulai ulang karena diasumsikan bahwa Anda telah sengaja menghentikan wadah dan Docker ingin memiliki cara untuk mencegah memulai ulang dari awal. loop, jika kamu membunuhnya, kamu benar-benar ingin membunuhnya.
Saya menemukan tautan berikut ini bernilai yang menunjukkan perilaku yang sama di versi yang berbeda (jadi itu bukan bug tetapi perilaku yang diharapkan):
sumber