Bash

Postgresql:如何確定數據庫 docker 容器是否正在執行?

  • June 17, 2021

在 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

如何使用 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 適用於大多數數據庫(除非您想檢測其類型以及需要自定義腳本的地方)。

引用自:https://serverfault.com/questions/817665