En el script de shell de punto de entrada de una imagen de docker, quiero determinar si un contenedor postgresql puede escuchar conexiones. Para mysql utilicé el siguiente fragmento de código:
while ! mysqladmin ping -h"$MOODLE_DB_HOST" -P $MOODLE_DB_PORT --silent; do echo "Connecting to ${MOODLE_DB_HOST} Failed" sleep 1done
¿Cómo puedo lograr algo similar usando postgresql?
En el dockerfile, agregue:
RUN apt-get update && apt-get install -f -y postgresql-client
Luego, en el script de punto de entrada, 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
Otro enfoque
Otro enfoque es mediante el uso de 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
Donde variable ${DB_HOST}
contiene el host de la base de datos. ${DB_PORT}
contiene el puerto de la base de datos. Thas funciona en la mayoría de las bases de datos (excepto si desea detectar su tipo también cuando se necesita un script personalizado).