2017-10-01 6 views
0

私はKong API Gatewayコンテナとpostgresコンテナを持っており、移行を実行する前にpostgresが起動してKongコンテナから準備ができているかどうかを確認する必要があります。私はpostgresクライアントユーティリティを、DockerfileにRUN yum install postgresql -y && yum clean allを使用し、psqlまたはpg_isreadyのいずれかを使用して公式Kongイメージに基づくカスタムイメージにインストールすることを考えていました。私はこれらの2つのユーティリティによるサーバの状態を確認するために、空のパスワードを持つpollingと呼ばれるpostgresユーザを作成しました。どちらも動作しません。Docker - postgresが用意されているかどうか確認してください

私は、カスタム香港の画像から、これらのコマンドを実行しようとしました:

  1. PSQLを。コマンドpsql -h postgres -U polling -w -c '\l'がエラーpsql: fe_sendauth: no password suppliedで失敗します。しかし、ユーザーにはパスワードはありません。私は間違って何をしていますか? psqlを使用してサーバが準備完了状態になっているかどうかを確認するフル・シェル・スクリプトは、hereと記述されています。

  2. pg_isready。私はcentos:7イメージに基づいて順番に、postgresqlパッケージにはpg_isreadyが含まれていない公式Kongイメージに基づいてこのユーティリティを個別にカスタムイメージにインストールする方法を取得しません。これらのユーティリティのみがインストールされており、/usr/binpg_config,pg_dump,pg_dumpall,pg_restore,psqlにあります。 pg_isreadyのインストール方法?私はKongのイメージに完全なサーバーのインストールを望んでいません。

+0

#1については、pg_hba.confを調整しましたか? https://dba.stackexchange.com/questions/83164/remove-password-requirement-for-user-postgres – bluescores

+0

@bluescoresを参照してください。この設定を変更するか、クライアント上で.pgpassを追加する必要があります。後者の問題を解決しました。私は私のポーリングユーザーのパスワードを設定しなければならないことに気付かなければならない。psqlは.pgpassに関係なくパスが空であれば私に叫んだ – Sergey

答えて

1

私の解決策は、公式の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" [email protected]; 

exec "[email protected]" 
2

これは、PGツールを使用せずに、ポート5432の単純なTCPチェックで解決します。我々はちょうどwait-for-it.shを使用し、それはうまく動作します。 Postgresは、サーバが実際に提供できる状態になるまでポートを開かないので、これは明らかです。

サンプルDockerfile:https://github.com/apim-haufe-io/wicked.kong/blob/master/Dockerfile

対応する起動スクリプト(最後の行だけが、この特定の問題のために興味深いものです):https://github.com/apim-haufe-io/wicked.kong/blob/master/startup.sh

スニペット:それについて

wait-for-it.sh -h $KONG_PG_HOST -p 5432 -t 30 -- kong start --run-migrations 

待ち:https://github.com/vishnubob/wait-for-it

関連する問題