Desidero poter eseguire il nodo all'interno di un contenitore finestra mobile e quindi essere in grado di eseguire docker stop <container>
. Questo dovrebbe interrompere il contenitore su SIGTERM
piuttosto che il timeout e fare un SIGKILL
. Sfortunatamente, mi sembra che manchi qualcosa, e le informazioni che ho trovato sembrano contraddire altri punti.arresto docker non funziona per il processo nodo
Ecco un Dockerfile prova:
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y curl
RUN curl -sSL http://nodejs.org/dist/v0.11.14/node-v0.11.14-linux-x64.tar.gz | tar -xzf -
ADD test.js/
ENTRYPOINT ["/node-v0.11.14-linux-x64/bin/node", "/test.js"]
Ecco il test.js
di cui al Dockerfile:
var http = require('http');
var server = http.createServer(function (req, res) {
console.log('exiting');
process.exit(0);
}).listen(3333, function (err) {
console.log('pid is ' + process.pid)
});
costruisco in questo modo:
$ docker build -t test .
l'eseguo così:
$ docker run --name test -p 3333:3333 -d test
Poi corro:
$ docker stop test
Al che il SIGTERM
a quanto pare non funziona, inducendolo a timeout di 10 secondi più tardi e poi morire.
Ho scoperto che se mi metto il compito di nodo attraverso sh -c
allora posso ucciderlo con ^C
da un (-it
) contenitore interattivo, ma io ancora non riesco a docker stop
al lavoro. Questo è in contraddizione con i commenti che ho letto dicendo che sh
non trasmette il segnale, ma potrebbe essere d'accordo con altri commenti che ho letto dicendo che il PID 1 non ottiene SIGTERM
(poiché è stato avviato tramite sh
, sarà PID 2).
L'obiettivo finale è di essere in grado di eseguire docker start -a ...
in un processo di avvio e di essere in grado di interrompere il servizio e in realtà esce dal contenitore.