DockerコンテナからローカルホストのPostgreSQLデータベースに接続する方法

2024-04-02

DockerコンテナからローカルホストのPostgreSQLデータベースに接続する方法

このチュートリアルでは、DockerコンテナからローカルホストのPostgreSQLデータベースに接続する方法について解説します。

環境

  • Ubuntu 20.04
  • Docker Desktop 20.10.11
  • PostgreSQL 14

手順

  1. PostgreSQLサーバーをインストール
sudo apt update
sudo apt install postgresql-server
  1. PostgreSQLデータベースを作成
sudo -u postgres psql
postgres=# CREATE DATABASE my_database;
  1. Dockerfileを作成
FROM postgres:14

ENV POSTGRES_USER postgres
ENV POSTGRES_PASSWORD password
ENV POSTGRES_DB my_database

RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/14/main/pg_hba.conf
  1. Dockerイメージをビルド
docker build -t postgresql .
  1. Dockerコンテナを起動
docker run -it --rm --name postgresql -p 5432:5432 postgresql
  1. コンテナからデータベースに接続
docker exec -it postgresql psql -U postgres -W -h localhost my_database

接続確認

psql (14.5)
Type "help" for help.

my_database=> \q

補足

  • ENV ディレクティブは、コンテナ内で環境変数を設定するために使用されます。
  • pg_hba.conf ファイルは、PostgreSQLデータベースへの接続を許可するホストとユーザーを指定するために使用されます。
  • -p フラグは、コンテナのポートとホストのポートをマッピングするために使用されます。
  • -W フラグは、パスワードプロンプトを表示せずにデータベースに接続するために使用されます。

注意事項

  • このチュートリアルは、基本的な接続方法を説明するものです。本番環境で使用するには、セキュリティ対策を講じる必要があります。
  • PostgreSQLの設定は、バージョンによって異なる場合があります。詳細は公式ドキュメントを参照してください。



FROM postgres:14

ENV POSTGRES_USER postgres
ENV POSTGRES_PASSWORD password
ENV POSTGRES_DB my_database

RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/14/main/pg_hba.conf

CMD ["postgres", "-D", "/var/lib/postgresql/data"]

接続テスト

# コンテナ起動
docker run -it --rm --name postgresql -p 5432:5432 postgresql

# コンテナ内に入り、データベースに接続
docker exec -it postgresql psql -U postgres -W -h localhost my_database

# データベース操作
my_database=> SELECT * FROM users;

# 接続切断
my_database=> \q

# コンテナ停止
docker stop postgresql

Docker Compose

複数のコンテナを連携させる場合は、Docker Composeを使うと便利です。

version: "3"

services:
  app:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - postgresql

  postgresql:
    image: "postgres:14"
    environment:
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: "password"
      POSTGRES_DB: "my_database"

コマンド

# コンポーザーの起動
docker-compose up -d

# 接続テスト
docker exec -it app psql -U postgres -W -h postgresql my_database

# コンテナ停止
docker-compose down



PostgreSQL に接続する他の方法

psql コマンドラインツール

psql は PostgreSQL 公式のクライアントツールです。コマンドラインからデータベースに接続して操作できます。

psql -U postgres -W -h localhost my_database

pgAdmin4 は PostgreSQL データベースを管理するための GUI ツールです。

DBeaver は汎用的なデータベース管理ツールです。PostgreSQL だけでなく、MySQL や Oracle などのデータベースにも接続できます。

Sequel Pro は Mac 用の PostgreSQL データベース管理ツールです。

接続方法の選択

  • コマンドライン操作に慣れている場合は、psql コマンドラインツールがおすすめです。
  • GUI ツールの方が使いやすい場合は、pgAdmin4 や DBeaver などのツールを使うと便利です。
  • 上記の方法を使用する場合は、PostgreSQL サーバーの設定を確認する必要があります。
  • セキュリティ対策を講じて、安全に接続するようにしてください。
  • Docker は、コンテナ化技術を用いて PostgreSQL サーバーを簡単に起動・停止できるというメリットがあります。
  • 他の方法は、Docker を使用しない方法です。

postgresql docker ubuntu


PostgreSQLでdblinkを使ってリモートデータベースにアクセスする方法

dblinkを使用するには、以下の手順が必要です。dblinkをインストールするdblinkはPostgreSQLのcontribパッケージの一部として提供されています。以下のコマンドでインストールできます。接続先のデータベースを設定するリモートデータベースに接続するには、postgresql...


PostgreSQL: エンコード関連のトラブルシューティング

最も簡単な方法は、SHOW SERVER_ENCODINGコマンドを使用することです。このコマンドは、現在のデータベースサーバーのエンコードを表示します。例:\encodingコマンドは、現在のクライアントセッションのエンコードを表示します。...


【保存版】Docker コンテナと MariaDB の接続: "ER_HOST_NOT_PRIVILEGED" エラーを解決するためのヒント集

このブログ記事では、Docker コンテナから MariaDB コンテナに接続できないという問題、特に "ER_HOST_NOT_PRIVILEGED" エラーが発生する場合について解説します。 この問題は、MySQL クライアントが適切な権限を持っていないために発生することが多く、Docker ネットワーク設定や MariaDB 設定の誤った構成が原因である可能性があります。...


DockerでMariaDBを起動する際のエラー「Error starting mariadb」の対処法

このエラーは、MariaDB コンテナの起動に必要なファイルのパーミッションが不足していることが原因です。具体的には、以下のファイルのパーミッションが関係しています。/docker-entrypoint. sh/etc/my. cnf以下の方法で、それぞれのファイルのパーミッションを設定します。...