【Docker】pgAdmin4でPostgreSQLに接続&永続化する
DockerでPostgresとpgAdmin4両方のコンテナを立て、pgAdminからDBへの接続をしたい。
また、DBに保存したデータやpgAdminの設定がビルドする度に消えるのは厄介なので永続化もしておきたい。
接続方法
1. Dockerの設定
version: '3.8'services: db: container_name: db image: postgres:14.2-alpine restart: always volumes: - ./docker/postgres/init.d:/docker-entrypoint-initdb.d - ./docker/postgres/pgdata:/var/lib/postgresql/data environment: POSTGRES_DB: mydb POSTGRES_USER: user POSTGRES_PASSWORD: pw TZ: 'Asia/Tokyo' ports: - '5432:5432'
db-gui: container_name: db-gui image: dpage/pgadmin4 volumes: - ./docker/pgadmin:/var/lib/pgadmin depends_on: - db environment: PGADMIN_DEFAULT_EMAIL: email@email.com PGADMIN_DEFAULT_PASSWORD: pw ports: - '80:80'
上記のようにdocker-compose.yml
を記述する。
それぞれdocker
下の対象ファイルにデータを永続化するようvolumes
に指定しておく。
2. コンテナの構築&起動
docker compose up -d --build
3. pgAdminへログイン
localhost:80
にアクセスするとpgAdminの管理画面が開くので、メアドはemail@email.com
、パスワードはpw
でログインする。
4. DBに接続
「Servers」を右クリックし「登録」から「サーバ…」をクリックする。
すると各種情報の入力を求められるので、下記のように入力する。
項目 | 値 |
---|---|
名前 | (任意のもの) |
ホスト名/アドレス | db |
ポート番号 | 5432 |
ユーザ名 | user |
パスワード | pw |
今回はDockerのコンテナ内のため、「ホスト名/アドレス」はlocalhost
ではなくdb
(サービス名)にする。
その後右下の「保存」をクリックすれば接続完了となる。
could not connect to server: Connection refusedIs the server running on host "localhost" (127.0.0.1) and acceptingTCP/IP connections on port 5432?
もし上記のようにエラーになる場合は、docker-compose.yml
に記述した各サービスのバージョンを見直すとよいかも。
筆者の場合はpostgres:15
を使用した際は接続に失敗していたものの、前述のバージョンに修正したところ解消した。