🐘
PostgreSQL と PgAdmin4 を Docker Compose で立ち上げる
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