GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo enviar una señal para que el programa se ejecute en un contenedor docker?

  • docker kill se utiliza para enviar la señal al proceso del contenedor principal, es decir, el proceso con PID 1.
  • Cualquier aplicación con PID 1 puede manejar señales directamente. El siguiente comando elimina el proceso principal de la ventana acoplable:$ docker kill --signal="SIGTERM" container-id/name
  • Pero la aplicación que no tiene PID 1, es decir, la aplicación es un proceso en segundo plano:
    • No podemos enviar solos directamente a ningún proceso en segundo plano que se ejecute dentro del contenedor docker.
    • En este caso, necesitamos atrapar y manejar la señal definida por el usuario en el script de shell que se ejecuta como punto de entrada.
  • Vamos a tener el siguiente Dockerfile . (Actualícelo según la aplicación)
FROM centos:6.7
# Install/Deploye the service below.

# Copy the shell script.
COPY entrypoint.sh /home
EXPOSE 8080
ENTRYPOINT ["/home/entrypoint.sh"]
  • A continuación se muestra el entrypoint.sh . (Actualícelo según la aplicación). Supongamos que queremos reiniciar un init.d servicio.

    #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
    
  • Cree la imagen de la ventana acoplable y ejecute el contenedor.
  • Ahora puede reiniciar el servicio desde la máquina Host:$docker kill --signal="SIGUSR1" container-id/name

Puedes usar docker kill --signal="<signal>" <container name or id> para enviar cualquier señal al proceso raíz de un contenedor dado.

Consulte https://docs.docker.com/engine/reference/commandline/kill/#send-a-custom-signal--to-a-container


Puede usar nsenter para ingresar al espacio de su contenedor y enviar su señal.

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>

Más información:http://jpetazzo.github.io/2014/06/23/docker-ssh-considered-evil/


Linux
  1. Cómo ejecutar MySQL en un contenedor Docker

  2. Cómo salir de un contenedor Docker

  3. ¿Cómo ejecutar Nginx dentro de un contenedor Docker sin detenerse?

  4. ¿Cómo agregar usuarios al contenedor Docker?

  5. Cómo ejecutar un trabajo cron dentro de un contenedor docker

Cómo ejecutar Grafana en un contenedor Docker

Cómo ejecutar contenedores Docker

Cómo usar SSH en un contenedor Docker

Cómo gestionar contenedores Docker

Maneras brillantes de cómo ejecutar un programa en Linux

Cómo escribir y ejecutar un programa C en Linux