Moved waitforit into Dockerfile, added to cont-init.d
This commit is contained in:
parent
34fb586912
commit
79c5cd91f3
@ -23,6 +23,9 @@ COPY root /
|
|||||||
# Note: Tweak this line if you're running anything other than x86 AMD64 (64-bit).
|
# Note: Tweak this line if you're running anything other than x86 AMD64 (64-bit).
|
||||||
RUN curl -L -s https://github.com/just-containers/s6-overlay/releases/download/v1.19.1.1/s6-overlay-amd64.tar.gz | tar xvzf - -C /
|
RUN curl -L -s https://github.com/just-containers/s6-overlay/releases/download/v1.19.1.1/s6-overlay-amd64.tar.gz | tar xvzf - -C /
|
||||||
|
|
||||||
|
# Add wait-for-it.sh
|
||||||
|
ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /srv
|
||||||
|
|
||||||
# Expose Nginx ports.
|
# Expose Nginx ports.
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
EXPOSE 4443
|
EXPOSE 4443
|
||||||
|
|||||||
22
root/etc/cont-init.d/98-wait-for-db
Normal file
22
root/etc/cont-init.d/98-wait-for-db
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/with-contenv sh
|
||||||
|
|
||||||
|
# Wait for the DB to be reachable before proceeding. This avoids race condition
|
||||||
|
# whereby database is not ready (yet), and so TTRSS config isn't correctly created
|
||||||
|
|
||||||
|
#############
|
||||||
|
# This simply duplicates the logic from ttrss-configure-db.php
|
||||||
|
ename = 'DB';
|
||||||
|
eport = 5432;
|
||||||
|
|
||||||
|
if [ $DB_TYPE = 'pgsql ];
|
||||||
|
then
|
||||||
|
eport = 5432;
|
||||||
|
dbhost = DB_PORT_5432_TCP_ADDR
|
||||||
|
else
|
||||||
|
eport = 3306;
|
||||||
|
dbhost = DB_PORT_3306_TCP_ADDR
|
||||||
|
fi
|
||||||
|
#############
|
||||||
|
|
||||||
|
# Run wait-for-it.sh to confirm DB comes up before we proceed
|
||||||
|
/srv/wait-for-it.sh $dbhost:$eport
|
||||||
@ -1,177 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Use this script to test if a given TCP host/port are available
|
|
||||||
|
|
||||||
cmdname=$(basename $0)
|
|
||||||
|
|
||||||
echoerr() { if [[ $QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
|
|
||||||
|
|
||||||
usage()
|
|
||||||
{
|
|
||||||
cat << USAGE >&2
|
|
||||||
Usage:
|
|
||||||
$cmdname host:port [-s] [-t timeout] [-- command args]
|
|
||||||
-h HOST | --host=HOST Host or IP under test
|
|
||||||
-p PORT | --port=PORT TCP port under test
|
|
||||||
Alternatively, you specify the host and port as host:port
|
|
||||||
-s | --strict Only execute subcommand if the test succeeds
|
|
||||||
-q | --quiet Don't output any status messages
|
|
||||||
-t TIMEOUT | --timeout=TIMEOUT
|
|
||||||
Timeout in seconds, zero for no timeout
|
|
||||||
-- COMMAND ARGS Execute command with args after the test finishes
|
|
||||||
USAGE
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
wait_for()
|
|
||||||
{
|
|
||||||
if [[ $TIMEOUT -gt 0 ]]; then
|
|
||||||
echoerr "$cmdname: waiting $TIMEOUT seconds for $HOST:$PORT"
|
|
||||||
else
|
|
||||||
echoerr "$cmdname: waiting for $HOST:$PORT without a timeout"
|
|
||||||
fi
|
|
||||||
start_ts=$(date +%s)
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
if [[ $ISBUSY -eq 1 ]]; then
|
|
||||||
nc -z $HOST $PORT
|
|
||||||
result=$?
|
|
||||||
else
|
|
||||||
(echo > /dev/tcp/$HOST/$PORT) >/dev/null 2>&1
|
|
||||||
result=$?
|
|
||||||
fi
|
|
||||||
if [[ $result -eq 0 ]]; then
|
|
||||||
end_ts=$(date +%s)
|
|
||||||
echoerr "$cmdname: $HOST:$PORT is available after $((end_ts - start_ts)) seconds"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
return $result
|
|
||||||
}
|
|
||||||
|
|
||||||
wait_for_wrapper()
|
|
||||||
{
|
|
||||||
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
|
|
||||||
if [[ $QUIET -eq 1 ]]; then
|
|
||||||
timeout $BUSYTIMEFLAG $TIMEOUT $0 --quiet --child --host=$HOST --port=$PORT --timeout=$TIMEOUT &
|
|
||||||
else
|
|
||||||
timeout $BUSYTIMEFLAG $TIMEOUT $0 --child --host=$HOST --port=$PORT --timeout=$TIMEOUT &
|
|
||||||
fi
|
|
||||||
PID=$!
|
|
||||||
trap "kill -INT -$PID" INT
|
|
||||||
wait $PID
|
|
||||||
RESULT=$?
|
|
||||||
if [[ $RESULT -ne 0 ]]; then
|
|
||||||
echoerr "$cmdname: timeout occurred after waiting $TIMEOUT seconds for $HOST:$PORT"
|
|
||||||
fi
|
|
||||||
return $RESULT
|
|
||||||
}
|
|
||||||
|
|
||||||
# process arguments
|
|
||||||
while [[ $# -gt 0 ]]
|
|
||||||
do
|
|
||||||
case "$1" in
|
|
||||||
*:* )
|
|
||||||
hostport=(${1//:/ })
|
|
||||||
HOST=${hostport[0]}
|
|
||||||
PORT=${hostport[1]}
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
--child)
|
|
||||||
CHILD=1
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
-q | --quiet)
|
|
||||||
QUIET=1
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
-s | --strict)
|
|
||||||
STRICT=1
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
-h)
|
|
||||||
HOST="$2"
|
|
||||||
if [[ $HOST == "" ]]; then break; fi
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--host=*)
|
|
||||||
HOST="${1#*=}"
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
-p)
|
|
||||||
PORT="$2"
|
|
||||||
if [[ $PORT == "" ]]; then break; fi
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--port=*)
|
|
||||||
PORT="${1#*=}"
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
-t)
|
|
||||||
TIMEOUT="$2"
|
|
||||||
if [[ $TIMEOUT == "" ]]; then break; fi
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--timeout=*)
|
|
||||||
TIMEOUT="${1#*=}"
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
CLI="$@"
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
--help)
|
|
||||||
usage
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echoerr "Unknown argument: $1"
|
|
||||||
usage
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ "$HOST" == "" || "$PORT" == "" ]]; then
|
|
||||||
echoerr "Error: you need to provide a host and port to test."
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
TIMEOUT=${TIMEOUT:-15}
|
|
||||||
STRICT=${STRICT:-0}
|
|
||||||
CHILD=${CHILD:-0}
|
|
||||||
QUIET=${QUIET:-0}
|
|
||||||
|
|
||||||
# check to see if timeout is from busybox?
|
|
||||||
# check to see if timeout is from busybox?
|
|
||||||
TIMEOUT_PATH=$(realpath $(which timeout))
|
|
||||||
if [[ $TIMEOUT_PATH =~ "busybox" ]]; then
|
|
||||||
ISBUSY=1
|
|
||||||
BUSYTIMEFLAG="-t"
|
|
||||||
else
|
|
||||||
ISBUSY=0
|
|
||||||
BUSYTIMEFLAG=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $CHILD -gt 0 ]]; then
|
|
||||||
wait_for
|
|
||||||
RESULT=$?
|
|
||||||
exit $RESULT
|
|
||||||
else
|
|
||||||
if [[ $TIMEOUT -gt 0 ]]; then
|
|
||||||
wait_for_wrapper
|
|
||||||
RESULT=$?
|
|
||||||
else
|
|
||||||
wait_for
|
|
||||||
RESULT=$?
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $CLI != "" ]]; then
|
|
||||||
if [[ $RESULT -ne 0 && $STRICT -eq 1 ]]; then
|
|
||||||
echoerr "$cmdname: strict mode, refusing to execute subprocess"
|
|
||||||
exit $RESULT
|
|
||||||
fi
|
|
||||||
exec $CLI
|
|
||||||
else
|
|
||||||
exit $RESULT
|
|
||||||
fi
|
|
||||||
Loading…
x
Reference in New Issue
Block a user