Postgresql: Como determinar se o contêiner do estivador do banco de dados está em execução?

1

No script shell de ponto de entrada de uma imagem de encaixe, desejo determinar se um contêiner postgresql pode ouvir as conexões. Para o mysql eu usei o seguinte trecho:

while ! mysqladmin ping -h"$MOODLE_DB_HOST" -P $MOODLE_DB_PORT --silent; do
  echo "Connecting to ${MOODLE_DB_HOST} Failed"
  sleep 1
done

Como posso conseguir um semelhante usando o postgresql?

    
por Dimitrios Desyllas 29.11.2016 / 14:13

1 resposta

0

No dockerfile, adicione:

RUN apt-get update && apt-get install -f -y postgresql-client

Em seguida, use o script de ponto de entrada:

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

Outra abordagem é usar o 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 a variável ${DB_HOST} contém o host do banco de dados, enquanto ${DB_PORT} contém a porta do banco de dados. Isso funciona na maioria dos bancos de dados (exceto se você quiser detectar seu tipo também, onde um script personalizado é necessário).

    
por 08.12.2016 / 13:37