🐘
Docker Providerで建てたPostgresコンテナに接続できない
対象読者
この記事では
- 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番を使用していないなら、コンテナ内ポート(ports
のinternal
)に5432番を指定しても解決します。
接続エラーの原因
Postgresがデフォルトで利用するポート番号5432
は環境変数PGPORT
で変更できます[1]。
接続エラーの原因は、PGPORT
で使いたいポート番号を指定せず、かつ5432
番以外をコンテナ内のポートに指定していたためでした。
余談
原因を突き止めるまで、同サービスの別コンテナからcurl -v telnet://コンテナ名:ポート番号
でコンテナ間通信を試みたり、ファイアウォールを切ってみたり、pg_hba.conf
を編集してみたりとかなりの遠回りをしてしまいました。
この記事が誰かの役に立つことを願います。
Discussion