Oteto Blogのロゴ

【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 refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?

もし上記のようにエラーになる場合は、docker-compose.ymlに記述した各サービスのバージョンを見直すとよいかも。

筆者の場合はpostgres:15を使用した際は接続に失敗していたものの、前述のバージョンに修正したところ解消した。