Postgresql: Как определить, запущен ли контейнер database docker?

В сценарии оболочки entrypoint образа docker я хочу определить, может ли контейнер postgresql прослушивать соединения. Для mysql я использовал следующий фрагмент кода:

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

Как я могу добиться аналогичного с помощью postgresql?

В dockerfile добавьте:

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

Затем в скрипте entrypoint используйте:

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