Addresses issue #197, send SIGTERM through to node

Node can't be PID 1, else it can't be term'ed and xvfb won't stop nicely.  So, according to https://docs.docker.com/engine/reference/builder/#entrypoint, we need to make sure it's not the bare entrypoint.

Also we need to be sure that run.sh passes the signal through to node, see https://unix.stackexchange.com/questions/146756/forward-sigterm-to-child-in-bash
This commit is contained in:
Sam Brown 2017-11-30 12:26:03 +00:00
parent 83e20b7a4e
commit 8eb736b821
2 changed files with 13 additions and 2 deletions

View file

@ -5,7 +5,7 @@ ENV NODE_ENV="production"
VOLUME /data VOLUME /data
WORKDIR /data WORKDIR /data
EXPOSE 80 EXPOSE 80
ENTRYPOINT ["/usr/src/app/run.sh"] ENTRYPOINT ["/bin/bash", "/usr/src/app/run.sh"]
RUN apt-get -qq update \ RUN apt-get -qq update \
&& DEBIAN_FRONTEND=noninteractive apt-get -y install \ && DEBIAN_FRONTEND=noninteractive apt-get -y install \

13
run.sh
View file

@ -1,4 +1,13 @@
#!/bin/bash #!/bin/bash
_term() {
echo "Caught signal, stopping gracefully"
kill -TERM "$child" 2>/dev/null
}
trap _term TERM
start-stop-daemon --start --pidfile ~/xvfb.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset start-stop-daemon --start --pidfile ~/xvfb.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset
echo "Waiting 3 seconds for xvfb to start..." echo "Waiting 3 seconds for xvfb to start..."
sleep 3 sleep 3
@ -6,7 +15,9 @@ sleep 3
export DISPLAY=:99.0 export DISPLAY=:99.0
cd /data cd /data
node /usr/src/app/ -p 80 "$@" node /usr/src/app/ -p 80 "$@" &
child=$!
wait "$child"
start-stop-daemon --stop --pidfile ~/xvfb.pid # stop xvfb when exiting start-stop-daemon --stop --pidfile ~/xvfb.pid # stop xvfb when exiting
rm ~/xvfb.pid rm ~/xvfb.pid