Docker ComposeでPostgreSQLコンテナのポートを変更して、本番環境へスムーズに移行

2024-05-22

Docker Compose で PostgreSQL コンテナーのサーバーポートを変更する方法

Docker Compose を使用して PostgreSQL コンテナーを起動する場合、デフォルトのサーバーポートは 5432 です。このポートを変更したい場合は、docker-compose.yml ファイルで設定を変更する必要があります。

手順

  1. docker-compose.yml ファイルを開きます。
  2. services セクションで、postgresql サービスを見つけます。
  3. ports プロパティを見つけます。これは、コンテナー内のポートとホストマシン上のポートのマッピングを定義するプロパティです。
  4. デフォルトのポートマッピング (通常は "5432:5432") を、変更したいポート番号に置き換えます。
  5. Docker Compose を使用してコンテナーを再起動します。

以下の例では、PostgreSQL コンテナーのサーバーポートを 5433 に変更します。

version: "3.8"

services:
  postgresql:
    image: postgres:14
    ports:
      - "5433:5432"

補足

  • ポート番号を変更すると、そのポートを使用している他のアプリケーションとの競合を避けることができます。
  • ポート番号を変更した場合、クライアントアプリケーションで新しいポート番号を使用する必要があることに注意してください。



    PostgreSQL コンテナーのサーバーポートを変更する docker-compose.yml ファイルのサンプルコード

    version: "3.8"
    
    services:
      postgresql:
        image: postgres:14
        ports:
          - "5433:5432"
        environment:
          POSTGRES_PASSWORD: password
          POSTGRES_USER: postgres
    

    このコードの説明:

    • version: Docker Compose ファイルのバージョンを指定します。この例では、バージョン 3.8 を使用しています。
    • services: サービスの定義を含むセクションです。
    • postgresql: PostgreSQL コンテナーを定義するサービスです。
    • image: 使用する PostgreSQL イメージを指定します。この例では、postgres:14 イメージを使用しています。
    • ports: コンテナー内のポートとホストマシン上のポートのマッピングを定義するプロパティです。この例では、コンテナー内のポート 5433 をホストマシン上のポート 5432 にマッピングしています。
    • environment: コンテナー内で設定される環境変数を定義するプロパティです。この例では、POSTGRES_PASSWORDPOSTGRES_USER 環境変数を設定しています。これらの変数は、PostgreSQL サーバーにログインするために使用されます。

    このコードを使用する方法:

    1. コマンドプロンプトまたはターミナルを開き、docker-compose.yml ファイルが存在するディレクトリに移動します。
    2. 以下のコマンドを実行して、PostgreSQL コンテナーを起動します。
    docker-compose up -d
    
      psql -h localhost -p 5433 -U postgres
      
      1. プロンプトが表示されたら、パスワード password を入力します。

      これで、PostgreSQL サーバーに接続できるはずです。

      注意事項:

      • このコードはあくまで例であり、ニーズに合わせて変更する必要があります。
      • 強力なパスワードを設定して、PostgreSQL サーバーを保護することを忘れないでください。



      Docker Compose で PostgreSQL コンテナーのサーバーポートを変更するその他の方法

      環境変数を使用する

      environment プロパティを使用して、POSTGRES_PORT 環境変数を設定できます。この変数は、PostgreSQL サーバーが使用するポート番号を指定します。

      version: "3.8"
      
      services:
        postgresql:
          image: postgres:14
          environment:
            POSTGRES_PORT: 5433
            POSTGRES_PASSWORD: password
            POSTGRES_USER: postgres
      

      この方法を使用すると、docker-compose.yml ファイルでポート番号を明示的に指定する必要がなくなります。

      docker-compose run コマンドを使用して、PostgreSQL コンテナーを起動し、サーバーポートを一時的に設定することもできます。

      docker-compose run --name postgresql postgres -p 5433:5432
      

      このコマンドは、docker-compose up コマンドと同じようにコンテナーを起動しますが、-p フラグを使用して、コンテナー内のポートとホストマシン上のポートのマッピングを指定できます。

      カスタム Dockerfile を使用する

      独自の Dockerfile を作成して、PostgreSQL サーバーのデフォルトのポート番号を変更することもできます。

      FROM postgres:14
      
      ENV POSTGRES_PORT 5433
      
      RUN sed -i 's/5432/5433/g' /var/lib/postgresql/data/postgresql.conf
      

      この Dockerfile は、postgres:14 イメージに基づいており、POSTGRES_PORT 環境変数を 5433 に設定し、/var/lib/postgresql/data/postgresql.conf ファイル内のデフォルトのポート番号を 5433 に変更します。

      • 環境変数を使用すると、docker-compose.yml ファイルをよりクリーンに保つことができます。
      • docker-compose run コマンドを使用すると、一時的にポート番号を変更するのに便利です。
      • カスタム Dockerfile を使用すると、PostgreSQL サーバーの構成をより細かく制御できます。

        postgresql docker docker-compose


        FOR SHARE句、SKIP LOCKED句、NOWAITオプション、SELECT ... FOR UPDATEの使い方

        FOR SHARE句は、SELECTクエリが実行される際に、選択された行が他のセッションによって更新されないようにロックします。ただし、他のセッションはロックされている行を読み出すことはできます。SKIP LOCKED句は、SELECTクエリが実行される際に、すでに他のセッションによってロックされている行をスキップします。...


        知っておけば役立つ!PostgreSQLでタイムスタンプを切り上げ・切り下げる4つの方法

        date_trunc() 関数は、指定された日付型を指定された精度で切り捨てます。タイムスタンプを切り上げ・切り下げするには、以下のように date_part と interval を使用します。切り上げfloor() と ceil() 関数を使う...


        PostgreSQLデータベースのディスク使用量を確認する方法

        SQL関数を使用するPostgreSQLには、データベースのディスク使用量を確認するための組み込み関数があります。最も簡単な方法は、pg_database_size()関数を使用する方法です。この関数は、データベース名を渡すと、そのデータベースが使用するディスク容量をキロバイト単位で返します。...


        JSONB型列の更新をマスターしよう:PostgreSQLチュートリアル

        このチュートリアルでは、PostgreSQLでJSONB型列の更新操作を行う方法をいくつか紹介します。PostgreSQL 9.5以上テーブルにJSONB型列を含むカラムがあるPostgreSQL 9.5以降では、|| 演算子を使用してJSONB型列を更新することができます。この方法は、単純な値の更新や、新しいキーと値のペアを追加する場合に便利です。...


        PostgreSQLで「Cannot drop table users because other objects depend on it」エラーが発生?原因と解決策を徹底解説!

        PostgreSQLでテーブルを削除しようとした際に、「Cannot drop table users because other objects depend on it」というエラーが発生することがあります。これは、削除しようとしているテーブルが他のオブジェクト(ビュー、外部キー制約など)から参照されていることを示しています。...