docker kill
Wird verwendet, um ein Signal an den Hauptcontainerprozess zu senden, d. H. Prozess mit PID 1.- Jede Anwendung mit PID 1 kann Signale direkt verarbeiten. Der folgende Befehl beendet den Docker-Hauptprozess:
$ docker kill --signal="SIGTERM" container-id/name
- Aber eine Anwendung, die keine PID 1 hat, d. h. die Anwendung ist ein Hintergrundprozess:
- Wir können Single nicht direkt an einen Hintergrundprozess senden, der im Docker-Container ausgeführt wird.
- In diesem Fall müssen wir das benutzerdefinierte Signal im Shell-Skript, das als Einstiegspunkt läuft, abfangen und verarbeiten.
- Nehmen wir folgenden
Dockerfile
. (Aktualisieren Sie es gemäß der Anwendung)
FROM centos:6.7
# Install/Deploye the service below.
# Copy the shell script.
COPY entrypoint.sh /home
EXPOSE 8080
ENTRYPOINT ["/home/entrypoint.sh"]
-
Unten ist die
entrypoint.sh
. (Aktualisieren Sie es gemäß der Anwendung). Angenommen, wir möchten eineninit.d
neu starten Dienst.#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
- Erstellen Sie das Docker-Image und führen Sie den Container aus.
- Jetzt können Sie den Dienst von der Host-Maschine neu starten:
$docker kill --signal="SIGUSR1" container-id/name
Sie können docker kill --signal="<signal>" <container name or id>
verwenden um ein beliebiges Signal an den Root-Prozess eines bestimmten Containers zu senden.
Siehe https://docs.docker.com/engine/reference/commandline/kill/#send-a-custom-signal--to-a-container
Sie können nsenter verwenden, um in Ihren Containerraum zu gelangen und Ihr Signal zu senden.
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>
Weitere Informationen:http://jpetazzo.github.io/2014/06/23/docker-ssh-considered-evil/