GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengirim sinyal ke program yang dijalankan dalam wadah buruh pelabuhan?

  • 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-restart init.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/


Linux
  1. Bagaimana Cara Menjalankan Program Di Dalam Wadah Docker?

  2. Cara Menjalankan MySQL Dalam Wadah Docker

  3. Cara Keluar dari Kontainer Docker

  1. Cara Menjalankan Perintah di Running Docker Container

  2. Bagaimana cara menjalankan Nginx di dalam wadah Docker tanpa berhenti?

  3. Bagaimana cara menambahkan pengguna ke wadah Docker?

  1. Cara Menggunakan Perintah Docker Run dengan Contoh

  2. Cara Menjalankan Jenkins Container sebagai Layanan Systemd dengan Docker

  3. Cara menjalankan tugas cron di dalam wadah buruh pelabuhan