docker kill
digunakan untuk mengirim sinyal ke proses wadah utama yaitu proses dengan PID 1.- Aplikasi apa pun dengan PID 1 dapat menangani sinyal secara langsung. Perintah di bawah ini mematikan proses buruh pelabuhan utama:
$ docker kill --signal="SIGTERM" container-id/name
- Tetapi aplikasi yang tidak memiliki PID 1 yaitu aplikasi adalah proses latar belakang:
- Kami tidak dapat mengirim single langsung ke proses latar belakang apa pun yang berjalan di dalam wadah buruh pelabuhan.
- Dalam hal ini, kita perlu menjebak dan menangani sinyal yang ditentukan pengguna dalam skrip shell yang berjalan sebagai titik masuk.
- Mari kita memiliki
Dockerfile
berikut . (Perbarui sesuai aplikasi)
FROM centos:6.7
# Install/Deploye the service below.
# Copy the shell script.
COPY entrypoint.sh /home
EXPOSE 8080
ENTRYPOINT ["/home/entrypoint.sh"]
-
Di bawah ini adalah
entrypoint.sh
. (Perbarui sesuai aplikasi). Misalkan kita ingin me-restartinit.d
layanan.#start the service /etc/init.d/<servicename> start pid="$!" # SIGUSR1- Single handler my_handler() { /etc/init.d/<servicename> restart } # Trap and handle the user defind singnal. trap 'my_handler' SIGUSR1 # wait forever(Alive container.) while true do tail -f /dev/null & wait ${!} done
- Bangun image buruh pelabuhan dan jalankan container.
- Sekarang Anda dapat memulai ulang layanan dari mesin Host:
$docker kill --signal="SIGUSR1" container-id/name
Anda dapat menggunakan docker kill --signal="<signal>" <container name or id>
untuk mengirim sinyal apa pun ke proses root dari wadah yang diberikan.
Lihat https://docs.docker.com/engine/reference/commandline/kill/#send-a-custom-signal--to-a-container
Anda dapat menggunakan nsenter untuk masuk ke ruang penampung dan mengirimkan sinyal Anda.
PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid kill -SIGINT <PID of your program inside your container>
Info lebih lanjut:http://jpetazzo.github.io/2014/06/23/docker-ssh-dianggap-evil/