pg_bouncerと別DBでDiscourseを実行する

Discourse インスタンスを、Azure 上でホストされている別の Postgres DB(こちら に記載されている手順で設定)に pg_bouncer を経由して接続するように設定しようとしていますが、問題が発生しています。

Discourse は Azure 上の VM でホストされています。pg_bouncer は VM にインストールされ設定済みで、以下のコマンドで VM からホストされた DB への接続を確認できます。

psql -h 127.0.0.1 -p 5432 -U [username] -d [database]

app.yml では、DB ホスト名を使用する代わりに 127.0.0.1 を使用するように変更しました。

DISCOURSE_DB_HOST: [was hostname, tried 127.0.0.1]

アプリを再ビルドすると、以下のエラーが表示されます。

I, [2020-09-18T20:48:51.653890 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
PG::ConnectionBad: could not connect to server: Connection refused
	Is the server running on host "127.0.0.1" and accepting
	TCP/IP connections on port 5432?

psql 経由での接続と app.yml の設定の違いとして考えられるのは、app.yml にはパスワードが指定されている点です。psql では pg_bouncer の userlist に設定されているため、パスワードの指定は不要です。

ご助力いただければ幸いです。

「いいね!」 1

コンテナからアクセスできる IP アドレスを使用する必要があると思います。コンテナには独自の localhost が存在すると考えられます。

「いいね!」 3

ああ、そうだった!10.x.x.x のアドレスを使えば問題なく動作します。

ただし、これが最善の解決策とは限りません。Discourse の Docker コンテナからホストにアクセスするより良い方法があれば、ぜひ教えてください。

ありがとうございます!

「いいね!」 1