Docker-检查Postgres是否已准备好 [英] Docker - check if postgres is ready

查看:0
本文介绍了Docker-检查Postgres是否已准备好的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Kong API Gateway容器和一个postgres容器,在运行迁移之前,我需要检查postgres是否已经从Kong容器启动并准备好。我正在考虑使用Dockerfile中的RUN yum install postgresql -y && yum clean all将postgres客户端实用程序安装到基于官方Kong映像的自定义映像中,并使用psqlpg_isready来实现这一点。我已经创建了一个名为polling的postgres用户,其密码为空,专门用于通过这两个实用程序检查服务器的状态。他们两个都不管用。

我尝试从自定义Kong映像执行以下命令:

  1. psql。命令psql -h postgres -U polling -w -c 'l'失败,错误为psql: fe_sendauth: no password supplied。但用户没有密码。我做错了什么?here描述了使用psql检查服务器是否已准备就绪的完整外壳脚本。

  2. PG_is Ready。我不知道如何将此实用程序单独安装到基于官方Kong镜像的自定义镜像中,而该镜像又基于centos:7镜像,postgresql包不包括pg_isready/usr/binpg_configpg_dumppg_dumpallpg_restorepsql中只安装了这些实用程序。如何安装pg_isready?我不希望在Kong映像中安装完整的服务器。

推荐答案

我的解决方案是基于孔令辉官方镜像创建一个新镜像,并覆盖入口点,如下所示:

#!/usr/bin/env bash
set -e

# Disabling nginx daemon mode
export KONG_NGINX_DAEMON="off"

# Setting default prefix (override any existing variable)
export KONG_PREFIX="/usr/local/kong"

# Prepare Kong prefix
if [ "$1" = "/usr/local/openresty/nginx/sbin/nginx" ]; then
    kong prepare -p "/usr/local/kong"
fi

#waiting for postgres
until psql --host=$KONG_PG_HOST --username=$POLLING_USER $POLLING_DATABASE -w &>/dev/null
do
  echo "Waiting for PostgreSQL..."
  sleep 1
done

echo "Postgres is ready, running the migrations..."

kong migrations up

echo "READY TO START UP KONG USING CMD" $@;

exec "$@"

这篇关于Docker-检查Postgres是否已准备好的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆