docker kill
utilisé pour envoyer un signal au processus de conteneur principal, c'est-à-dire le processus avec le PID 1.- Toute application avec PID 1 peut gérer directement les signaux. La commande ci-dessous tue le processus docker principal :
$ docker kill --signal="SIGTERM" container-id/name
- Mais l'application qui n'a pas le PID 1, c'est-à-dire que l'application est un processus d'arrière-plan :
- Nous ne pouvons pas envoyer de single directement à un processus d'arrière-plan s'exécutant dans le conteneur Docker.
- Dans ce cas, nous devons piéger et gérer le signal défini par l'utilisateur dans le script shell exécuté comme point d'entrée.
- Prenons le
Dockerfile
suivant . (Mettre à jour selon l'application)
FROM centos:6.7
# Install/Deploye the service below.
# Copy the shell script.
COPY entrypoint.sh /home
EXPOSE 8080
ENTRYPOINT ["/home/entrypoint.sh"]
-
Ci-dessous le
entrypoint.sh
. (Mettez-le à jour selon l'application). Supposons que nous voulions redémarrer uninit.d
services.#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
- Créer l'image docker et exécuter le conteneur.
- Vous pouvez maintenant redémarrer le service depuis la machine hôte :
$docker kill --signal="SIGUSR1" container-id/name
Vous pouvez utiliser docker kill --signal="<signal>" <container name or id>
pour envoyer n'importe quel signal au processus racine d'un conteneur donné.
Voir https://docs.docker.com/engine/reference/commandline/kill/#send-a-custom-signal--to-a-container
Vous pouvez utiliser nsenter pour entrer dans votre espace conteneur et envoyer votre signal.
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>
Plus d'infos :http://jpetazzo.github.io/2014/06/23/docker-ssh-considered-evil/