Postgresql:如何确定数据库 docker 容器是否正在运行?

Dim*_*las 5 postgresql bash docker

在 docker 映像的入口点 shell 脚本上,我想确定 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
Run Code Online (Sandbox Code Playgroud)

如何使用 postgresql 实现类似的功能?

Dim*_*las 3

在 dockerfile 上添加:

RUN apt-get update && apt-get install -f -y postgresql-client
Run Code Online (Sandbox Code Playgroud)

然后在入口点脚本上使用:

  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
Run Code Online (Sandbox Code Playgroud)

另一种方法

另一种方法是使用 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
Run Code Online (Sandbox Code Playgroud)

其中变量${DB_HOST}包含数据库主机,同时${DB_PORT}包含数据库端口。这适用于大多数数据库(除非您还想检测其类型以及需要自定义脚本的情况)。