changeset 116:d0a5db5b9bdf

docker: fixed bad stopping: - use exec when it was missing, so the TERM signal is properly catched, and containers can be stopped instead of being killed after 10s - for a unknown reason, exec and su don't handle correctly "$@" with Docker in base.scripts/sat. It's working as expected when launched from withing a running container, but not when launched with "docker run", so a workaround is used with trap and wait
author Goffi <goffi@goffi.org>
date Fri, 04 Mar 2016 23:31:26 +0100 (2016-03-04)
parents 5d8b9ca2afd4
children 834bedf42332
files docker/base/scripts/sat docker/prosody/scripts/prosody docker/sat_pubsub/Dockerfile docker/sat_pubsub/scripts/launch_postgres_and_pubsub.sh
diffstat 4 files changed, 22 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/docker/base/scripts/sat	Fri Mar 04 23:25:42 2016 +0100
+++ b/docker/base/scripts/sat	Fri Mar 04 23:31:26 2016 +0100
@@ -1,4 +1,17 @@
 #!/bin/sh
 # account domain is set, then sat is launched with D-Bus activated
-chmod a+w /etc/hosts
-su -c "set_account_domain && dbus-launch /usr/bin/sat $@" sat
+
+# XXX: exec is not working with Docker and su here for whatever reason, so using trap/wait workaround
+#      thanks to cuonglm for the tip (https://unix.stackexchange.com/questions/146756/forward-sigterm-to-child-in-bash/146770#146770)
+
+on_sigterm() {
+  /usr/bin/sat stop
+  # to have a proper exit code
+  exit $?
+}
+trap on_sigterm TERM
+
+set_account_domain
+eval $(dbus-launch --sh-syntax)
+su -c "/usr/bin/sat $@" sat &
+wait $!
--- a/docker/prosody/scripts/prosody	Fri Mar 04 23:25:42 2016 +0100
+++ b/docker/prosody/scripts/prosody	Fri Mar 04 23:31:26 2016 +0100
@@ -16,4 +16,4 @@
     openssl req -new -x509 -days 1825 -nodes -out "/usr/share/sat/certificates/libervia.crt"\
             -newkey rsa:4096 -keyout "/usr/share/sat/certificates/libervia.key" -subj "/C=AU/CN=$DOMAIN"
 fi
-/usr/bin/prosody "$@"
+exec /usr/bin/prosody "$@"
--- a/docker/sat_pubsub/Dockerfile	Fri Mar 04 23:25:42 2016 +0100
+++ b/docker/sat_pubsub/Dockerfile	Fri Mar 04 23:31:26 2016 +0100
@@ -15,9 +15,10 @@
 ############################
 
 
-COPY scripts/sat_pubsub /usr/local/bin/
+COPY scripts/sat_pubsub scripts/launch_postgres_and_pubsub.sh /usr/local/bin/
 RUN chown root:root /usr/local/bin/sat_pubsub && \
 chmod 0555 /usr/local/bin/sat_pubsub && \
+chmod 0555 /usr/local/bin/launch_postgres_and_pubsub.sh && \
 
 ########
 # BASE #
@@ -49,4 +50,4 @@
 ##########
 
 # we need to launch PostgreSQL, so we launch as root then switch to sat user
-ENTRYPOINT ["/bin/sh","-c", "service postgresql start && su -c sat_pubsub sat"]
+ENTRYPOINT ["launch_postgres_and_pubsub.sh"]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docker/sat_pubsub/scripts/launch_postgres_and_pubsub.sh	Fri Mar 04 23:31:26 2016 +0100
@@ -0,0 +1,3 @@
+#!/bin/sh
+service postgresql start &&
+exec su -c sat_pubsub sat