PgAdminにDB接続情報を環境設定的に構成する方法
あらかじめ接続情報を入れておきたいとか、構成管理したいとか、そういった状況。
設定方法はいくつかのサイトで解説が見られるが、バージョン依存で上手くいかないケースが散見される。
stackoverflow.com
最終的に上手くいったのは以下の方法となった。
stackoverflow.com
以下、Docker Compose を前提としたソースコード。
docker-compose.yaml
version: "3.9" services: postgres_db: image: postgres volumes: - ./postgres_db_data:/var/lib/postgresql/data environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres ports: - "15432:5432" pgadmin: image: dpage/pgadmin4:7.1 restart: always environment: PGADMIN_DEFAULT_EMAIL: pgadmin@pgadmin.com PGADMIN_DEFAULT_PASSWORD: pgadmin ports: - "8080:80" volumes: - ./servers.json:/pgadmin4/servers.json - ./pgpass:/var/lib/pgadmin/pgpass depends_on: - "postgres_db"
ファイルマウントが重要なわけだが、pgpass については後述する相対パスで指定するのでたぶんどこに置いてもいける。
servers.json
{ "Servers": { "1": { "Name": "docker_postgres", "Group": "docker_postgres_group", "Host": "postgres_db", "Port": 5432, "MaintenanceDB": "postgres", "Username": "postgres", "PassFile": "../../pgpass", "SSLMode": "prefer" }, "2": { "Name": "docker_postgres_host", "Group": "docker_postgres_group", "Host": "host.docker.internal", "Port": 15432, "MaintenanceDB": "postgres", "Username": "postgres", "PassFile": "../../pgpass", "SSLMode": "prefer" } } }
"PassFile": "../../pgpass" が最重要ポイント。相対パスになっているっぽい。
pgpass
postgres_db:5432:postgres:postgres:postgres host.docker.internal:15432:postgres:postgres:postgres
パスワードは hostname:port:database:username:password の形式で書けば良い。
複数DBを1ファイルにも書ける。
微妙にハマるポイントが多く、予想に反して面倒であった。