В сценарии оболочки точки входа образа докера я хочу определить, может ли контейнер postgresql прослушивать соединения. Для mysql я использовал следующий фрагмент:
while ! mysqladmin ping -h"$MOODLE_DB_HOST" -P $MOODLE_DB_PORT --silent; do
echo "Connecting to ${MOODLE_DB_HOST} Failed"
sleep 1
done
Как я могу добиться аналогичного с помощью postgresql?
В dockerfile добавьте:
RUN apt-get update && apt-get install -f -y postgresql-client
Затем в сценарии точки входа используйте:
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
Другой подход - использовать 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
Где переменная ${DB_HOST}
содержит хост базы данных, пока ${DB_PORT}
содержит порт базы данных. Thas работает с большинством баз данных (кроме случаев, когда вы также хотите определить его тип, когда требуется специальный сценарий).