Назад | Перейти на главную страницу

Postgresql: как определить, запущен ли докер-контейнер базы данных?

В сценарии оболочки точки входа образа докера я хочу определить, может ли контейнер 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 работает с большинством баз данных (кроме случаев, когда вы также хотите определить его тип, когда требуется специальный сценарий).