Kemungkinan besar gambar kontainer yang Anda gunakan tidak menangani sinyal proses dengan benar. Jika Anda membuat gambar, ubahlah seperti yang disarankan oleh jawaban Roland Webers. Jika tidak, coba jalankan dengan --init
.
docker run -it --init ....
Ini memperbaiki Ctrl+C untuk saya. Sumber:https://docs.docker.com/v17.09/engine/reference/run/#specify-an-init-process
Posting ini mengusulkan CTRL-Z sebagai solusi untuk mengirim proses ke latar belakang dan kemudian mematikan proses dengan id prosesnya:Tidak dapat mematikan skrip Python dengan Ctrl-C
Kemungkinan masalah:
-
Program menangkap ctrl-c dan tidak melakukan apa-apa, sangat tidak mungkin.
-
Ada proses latar belakang yang tidak dikelola dengan benar. Hanya proses utama yang menerima sinyal dan sub-proses hang. Sangat mungkin apa yang terjadi.
Solusi yang Diusulkan:
-
Periksa dokumentasi program tentang cara memulai dan menghentikannya dengan benar. ctrl-c sepertinya bukan cara yang tepat.
-
Bungkus program dengan skrip bash docker-entrypoint.sh yang memblokir proses wadah dan dapat menangkap ctrl-c. Contoh bash ini akan membantu:https://rimuhosting.com/knowledgebase/linux/misc/trapping-ctrl-c-in-bash
-
Setelah menangkap ctrl-c aktifkan metode shutdown yang tepat untuk ipython notebook.
Masalahnya adalah Ctrl-C mengirimkan sinyal ke proses tingkat atas di dalam wadah, tetapi proses itu tidak selalu bereaksi seperti yang Anda harapkan. Proses tingkat atas memiliki ID 1 di dalam wadah, yang berarti bahwa proses tersebut tidak mendapatkan penangan sinyal default yang biasanya dimiliki oleh proses. Jika proses tingkat atas adalah sebuah shell, maka ia dapat menerima sinyal melalui penangannya sendiri, tetapi tidak meneruskannya ke perintah yang dijalankan di dalam shell. Detail dijelaskan di sini. Dalam kedua kasus tersebut, wadah buruh pelabuhan bertindak seolah-olah mengabaikan Ctrl-C.
Jika Anda membuat gambar sendiri, solusinya adalah menjalankan proses init minimal, seperti tini atau dumb-init, sebagai proses tingkat atas di dalam penampung.