# HG changeset patch # User Goffi # Date 1457130686 -3600 # Node ID d0a5db5b9bdfc61d0715aa476ab63e1e28fd3a48 # Parent 5d8b9ca2afd48d7999f14c613e085090826ef592 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 diff -r 5d8b9ca2afd4 -r d0a5db5b9bdf docker/base/scripts/sat --- 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 $! diff -r 5d8b9ca2afd4 -r d0a5db5b9bdf docker/prosody/scripts/prosody --- 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 "$@" diff -r 5d8b9ca2afd4 -r d0a5db5b9bdf docker/sat_pubsub/Dockerfile --- 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"] diff -r 5d8b9ca2afd4 -r d0a5db5b9bdf docker/sat_pubsub/scripts/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