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

我试图从自定义图像执行以下命令:

  1. psql.命令psql -h postgres -U polling -w -c '\l'失败,出现错误psql: fe_sendauth: no password supplied.但是用户没有密码.我做错了什么?使用psql判断服务器是否准备就绪的完整shell脚本在第here章中描述.

  2. pg_isready.我不知道如何将此实用程序单独安装到基于官方香港图像的自定义图像中,后者又基于centos:7图像,postgresql软件包不包括pg_isready.只安装了这些实用程序,可以在/usr/bin:pg_configpg_dumppg_dumpallpg_restorepsql中找到.如何安装pg_isready?我不想在香港映像中安装完整的服务器.

推荐答案

我的解决方案是在香港官方形象的基础上创建一个新形象,并覆盖入口点,如下所示:

#!/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 "$@"

Postgresql相关问答推荐

为什么在使用PostGIS时,英国郡的几何图形会出现在几内亚湾?

使用pg_repack从PostgreSQL中的表中删除OID

让Docker Compose Container等待容器PostgreSQL并恢复

执行准备好的语句不返回数据

我在try 访问我的数据库表时在 postgresql 中收到 aclcheck_error 错误

PostgreSQL:如何避免被零除?

如何在 postgresql 上使用 sqlalchemy 进行正确的 upsert?

如何在 postgresql 中创建一个空的 JSON 对象?

转换数组类型

PostgreSQL 返回准确或最接近查询日期的日期

PostgreSQL 查询到 Excel 表

?(问号)运算符在 Rails 中查询 Postgresql JSONB 类型

如何在 postgres 中使用 json_populate_recordset 解析 json

如何语法判断 PostgreSQL 配置文件?

由于外键约束无法删除对象

null 计算结果为 false 的情况

在 PostgreSQL 中 Select 进入临时表?

Postgis / Geodjango:无法确定数据库的 PostGIS 版本

在 pg_restore 期间排除表

升级到 Yosemite 10.10 后无法连接到 postgresql 数据库