🐘

PostgreSQL と PgAdmin4 を Docker Compose で立ち上げる

2024/04/07に公開

PostgreSQLをDockerで立ち上げた際に、psqlだけではなくPgAdminでも操作できるように、Docker ComposeでPgAdminも一緒に立ち上げます。

PgAdminは、Docker Imageとしても提供されているので、それを利用します。

Docker Compose の設定

PostgreSQL、PgAdmin共に現時点(2024年4月)での最新を利用します。

docker-compose.yml は下記のようになりました。

version: '3.8'

services:
  db:
    image: postgres:16
    ports:
      - "5432:5432"
    restart: always
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: sample
    volumes:
      - db-data:/var/lib/postgresql/data

  pgadmin4:
    image: dpage/pgadmin4:8.4
    ports:
      - 8080:80
    volumes:
      - pgadmin-data:/var/lib/pgadmin
      # PassFileも一緒に配置したかったが、下記を参考にしてもうまくいかなかった
      # https://stackoverflow.com/questions/66578506/where-is-the-pgpass-file-in-pgadmin4-docker-container-when-this-file-is-mounted
      - ./config/servers.json:/pgadmin4/servers.json
    environment:
      PGADMIN_DEFAULT_EMAIL: user@example.com
      PGADMIN_DEFAULT_PASSWORD: password
      PGADMIN_CONFIG_SERVER_MODE: "False"
      PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: "False"
    depends_on:
      - db

volumes:
  db-data:
  pgadmin-data:

PgAdminを利用する際に、なるべく手間が無いように下記のように設定しました。

  • PgAdminのログイン画面をスキップさせる
    • PGADMIN_CONFIG_SERVER_MODE: "False"PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: "False" とすることで対応
  • あらかじめ接続先のPostgreSQLを設定
    • config/servers.json を用意し、こちらに接続先のPostgreSQLの情報を記載

config/servers.json は下記のように設定しています。

{
    "Servers": {
        "1": {
            "Name": "db",
            "Group": "Servers",
            "Host": "db",
            "Port": 5432,
            "MaintenanceDB": "postgres",
            "Username": "user",
            "SSLMode": "prefer"
        }
    }
}

PgAdmin への接続

http://localhost:8080/ でPgAdminに接続できます。

できなかったこと

サーバのパスワードも保存済みにしたかったのですが、こちらはうまく行かずに諦めました。
下記を参考にいろいろ試しましたが、解決せずでした。

Discussion