GNU/Linux >> Znalost Linux >  >> Linux

Jak poslat signál ke spuštění programu v kontejneru dockeru?

  • docker kill používá se k odesílání signálu do procesu hlavního kontejneru, tj. procesu s PID 1.
  • Jakákoli aplikace s PID 1 může zpracovávat signály přímo. Níže uvedený příkaz zabije hlavní proces dockeru:$ docker kill --signal="SIGTERM" container-id/name
  • Ale aplikace, která nemá PID 1, tj. aplikace je proces na pozadí:
    • Nemůžeme odeslat single přímo do žádného procesu na pozadí spuštěného v kontejneru dockeru.
    • V tomto případě potřebujeme zachytit a zpracovat uživatelsky definovaný signál ve skriptu shellu spuštěném jako vstupní bod.
  • Mějme následující Dockerfile . (Aktualizujte jej podle aplikace)
FROM centos:6.7
# Install/Deploye the service below.

# Copy the shell script.
COPY entrypoint.sh /home
EXPOSE 8080
ENTRYPOINT ["/home/entrypoint.sh"]
  • Níže je entrypoint.sh . (Aktualizujte jej podle aplikace). Předpokládejme, že chceme restartovat init.d službu.

    #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
    
  • Vytvořte bitovou kopii dockeru a spusťte kontejner.
  • Nyní můžete službu restartovat z hostitelského počítače:$docker kill --signal="SIGUSR1" container-id/name

Můžete použít docker kill --signal="<signal>" <container name or id> poslat jakýkoli signál do kořenového procesu daného kontejneru.

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


Pomocí nsenter se můžete dostat do svého kontejnerového prostoru a odeslat svůj signál.

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>

Více informací:http://jpetazzo.github.io/2014/06/23/docker-ssh-considered-evil/


Linux
  1. Jak spustit program uvnitř kontejneru Docker?

  2. Jak spustit MySQL v kontejneru Docker

  3. Jak spustit Nginx v kontejneru Docker bez zastavení?

  1. Jak spustit příkaz na spuštěném kontejneru Docker

  2. Jak přidat uživatele do kontejneru Docker?

  3. Jak spustit úlohu cron uvnitř kontejneru dockeru

  1. Jak používat příkaz Docker Run s příklady

  2. Jak spustit Jenkins Container jako službu Systemd pomocí Dockeru

  3. Jak opustit kontejner Docker