クライアント (c) であるRHEL 9.5サーバーの /mnt/nfs/postgres_data ディレクトリは、すでにOSによってNFSマウントされています。Docker Composeには、このOSがマウントした既存のホスト側ディレクトリを、コンテナ内のディレクトリに「バインド(bind)」する機能を使います。


docker-compose.yml の具体例

以下は、クライアント (c) のRHELサーバー(アプリサーバー)の /mnt/nfs/postgres_data を、PostgreSQLコンテナのデータディレクトリとして使用する docker-compose.yml の設定例です。

ファイル名: docker-compose.yml

# docker-compose.yml
version: '3.8'

services:
  # PostgreSQL データベースサービス
  db:
    # 公式のPostgreSQLイメージ (バージョン16を推奨)
    image: postgres:16

    # コンテナが停止した場合、常に再起動する
    restart: always

    # データベースの基本設定 (環境変数)
    environment:
      # POSTGRES_USER: データベースのスーパーユーザー名
      POSTGRES_USER: "myadmin"
      
      # POSTGRES_PASSWORD: スーパーユーザーのパスワード (必ず強固なものに変更してください)
      POSTGRES_PASSWORD: "YourSecurePassword123"
      
      # POSTGRES_DB: 作成するデフォルトのデータベース名
      POSTGRES_DB: "myapp_db"

    # ボリューム(データ永続化)の設定 (ここが最重要)
    volumes:
      # [ホスト(c)のパス]:[コンテナ内のパス]:[SELinuxオプション]
      - /mnt/nfs/postgres_data:/var/lib/postgresql/data:Z

    # (オプション) ホストのポート5432をコンテナの5432にマッピング
    # ports:
    #   - "5432:5432"

② 設定内容の徹底解説

上記の docker-compose.yml の核心は volumes セクションの記述です。

volumes: - /mnt/nfs/postgres_data:/var/lib/postgresql/data:Z

この一行は、3つの部分に分解されます。

1. ホスト側のパス: /mnt/nfs/postgres_data

2. コンテナ内のパス: /var/lib/postgresql/data

3. 【RHEL環境で必須】 SELinuxオプション: :Z