🐘

Docker Providerで建てたPostgresコンテナに接続できない

2023/09/26に公開

対象読者

この記事では

  • TerraformのDocker Providerを用いて建てたPostgresコンテナに接続できない
  • Postgresコンテナ内のポートが5432番でない

方を対象としています。

解決:環境変数PGPORTを用いる

結論から言うと、以下のように環境変数へPGPORT=変更先のポート番号を追記し、ポート番号を変更することで解決しました。

resource "docker_container" "postgres" {
	...
	env	= [
	    "POSTGRES_DB=${var.database_name}",
	    "POSTGRES_USER=${var.user}",
	    "POSTGRES_PASSWORD=${var.password}",
	    "PGPORT=${var.port}" # 追記
	]
	ports {
		internal = var.port
		external = var.port # DBeaver用に外に出す(この記事とは関係なし)
	}
}

同一サービスの別コンテナで5432番を使用していないなら、コンテナ内ポート(portsinternal)に5432番を指定しても解決します。

接続エラーの原因

Postgresがデフォルトで利用するポート番号5432は環境変数PGPORTで変更できます[1]
接続エラーの原因は、PGPORTで使いたいポート番号を指定せず、かつ5432番以外をコンテナ内のポートに指定していたためでした。

余談

原因を突き止めるまで、同サービスの別コンテナからcurl -v telnet://コンテナ名:ポート番号でコンテナ間通信を試みたり、ファイアウォールを切ってみたり、pg_hba.confを編集してみたりとかなりの遠回りをしてしまいました。
この記事が誰かの役に立つことを願います。

脚注
  1. https://www.postgresql.org/docs/current/libpq-envars.html ↩︎

Discussion