Traffine I/O

日本語

2023-04-07

PostGISとPgAdmin4のDockerコンテナを構築する

PostGISとPgAdmin4のDockerコンテナを構築

この記事では、PostGISとPgAdmin4のDockerコンテナを構築し、PgAdmin4のコンソール上でPostGISに接続します。

Docker Compose YMLファイルの作成

次のdocker-compose.ymlファイルを作成します。

docker-compose.yml
version: '3.1'
services:
  postgis:
    image: postgis/postgis
    container_name: postgis
    ports:
      - '5432:5432'
    environment:
      POSTGRES_PASSWORD: postgres
    volumes:
      - pgdata:/var/lib/postgresql/data

  pgadmin4:
    image: dpage/pgadmin4
    container_name: pgadmin4
    ports:
      - '5050:80'
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@example.com
      PGADMIN_DEFAULT_PASSWORD: admin
    links:
      - postgis

volumes:
  pgdata:

次のコマンドを実行します。

bash
$ docker compose up

これで、PostGISとPgAdmin4のコンテナが起動します。

PgAdmin4の操作

PgAdmin4をコンソール上で操作し、PostGISに接続します。

まずはブラウザを開き、http://localhost:5050にアクセスします。認証情報を入力し、ログインします。

PgAdmin4 | 1

「Add New Server」をクリックします。

PgAdmin4 | 2

「Connection」タブを開き、PostGISと接続するための認証情報を入力します。そして「Save」ボタンをクリックします。

PgAdmin4 | 3

PostGISが接続されたことを確認できます。

PgAdmin4 | 4

PgAdmin4のコンテナのトラブルシューティング

コンテナが起動しない

docker-compose.ymlで、PGADMIN_DEFAULT_EMAILにメールアドレス形式ではない文字を指定するとコンテナ起動時にエラーになります。

docker-compose.yml
    environment:
        PGADMIN_DEFAULT_EMAIL: admin
        PGADMIN_DEFAULT_PASSWORD: admin
‘admin’ does not appear to be a valid email address. Please reset the PGADMIN_DEFAULT_EMAIL environment variable and try again.

PGADMIN_DEFAULT_EMAILをメールアドレス形式に修正すると解決します。

docker-compose.yml
    environment:
-        PGADMIN_DEFAULT_EMAIL: admin
+        PGADMIN_DEFAULT_EMAIL: admin@example.com
         PGADMIN_DEFAULT_PASSWORD: admin

pgAdmin操作時にエラーが発生

pgAdminがサポートしていないバージョンのPostgreSQLを操作しようとするとエラーが発生します。

Error retrieving the information – INTERNAL SERVER ERROR

ERROR: column rel.relhasoids does not exist
LINE 8: pg_get_userbyid(rel.relowner) AS relowner, rel.relhasoids,…

例えば、pgAdmin 5.7の場合は、PostgreSQL 14をサポートしていません。

参考

https://registry.hub.docker.com/r/postgis/postgis/
https://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!