No script de Shell entrypoint de uma imagem do docker, quero determinar se um contêiner postgresql pode ouvir conexões. Para mysql eu usei o seguinte snippet:
while ! mysqladmin ping -h"$MOODLE_DB_HOST" -P $MOODLE_DB_PORT --silent; do echo "Connecting to ${MOODLE_DB_HOST} Failed" sleep 1done
Como posso conseguir um semelhante usando postgresql?
RUN apt-get update && apt-get install -f -y postgresql-client
Em seguida, no script entrypoint use:
while ! pg_isready -h ${MOODLE_DB_HOST} -p ${MOODLE_DB_PORT} > /dev/null 2> /dev/null; do echo "Connecting to ${MOODLE_DB_HOST} Failed" sleep 1 done
Outra abordagem
Uma outra abordagem é usando netcat:
for count in {1..100}; do echo "Pinging mysql database attempt "${count} if $(nc -z ${DB_HOST} ${DB_PORT}) ; then echo "Can connect into database" break fi sleep 5 done
Onde variável ${DB_HOST} contém o host do banco de dados enquanto ${DB_PORT} contém a porta do banco de dados. Thas funciona na maioria dos bancos de dados (exceto se você quiser detectar seu tipo também onde um script personalizado é necessário).