sql >> データベース >  >> RDS >> PostgreSQL

公式のPostgreSQLDockerイメージの構成ファイルをカスタマイズするにはどうすればよいですか?

    DockerComposeを使用

    Docker Composeを使用する場合は、command: postgres -c option=valueを使用できます。 docker-compose.ymlで Postgresを設定します。

    たとえば、これによりPostgresがファイルにログを記録します:

    command: postgres -c logging_collector=on -c log_destination=stderr -c log_directory=/logs
    

    Vojtech Vitekの答えを採用して、使用できます

    command: postgres -c config_file=/etc/postgresql.conf
    

    Postgresが使用する設定ファイルを変更します。カスタム構成ファイルをボリュームとともにマウントします:

    volumes:
       - ./customPostgresql.conf:/etc/postgresql.conf
    

    これがdocker-compose.ymlです 私のアプリケーションの、Postgresを設定する方法を示しています:

    # Start the app using docker-compose pull && docker-compose up to make sure you have the latest image
    version: '2.1'
    services:
      myApp:
        image: registry.gitlab.com/bullbytes/myApp:latest
        networks:
          - myApp-network
      db:
         image: postgres:9.6.1
         # Make Postgres log to a file.
         # More on logging with Postgres: https://www.postgresql.org/docs/current/static/runtime-config-logging.html
         command: postgres -c logging_collector=on -c log_destination=stderr -c log_directory=/logs
         environment:
           # Provide the password via an environment variable. If the variable is unset or empty, use a default password
           # Explanation of this shell feature: https://unix.stackexchange.com/questions/122845/using-a-b-for-variable-assignment-in-scripts/122848#122848
           - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-4WXUms893U6j4GE&Hvk3S*hqcqebFgo!vZi}
         # If on a non-Linux OS, make sure you share the drive used here. Go to Docker's settings -> Shared Drives
         volumes:
           # Persist the data between container invocations
           - postgresVolume:/var/lib/postgresql/data
           - ./logs:/logs
         networks:
           myApp-network:
             # Our application can communicate with the database using this hostname
             aliases:
               - postgresForMyApp
    networks:
      myApp-network:
        driver: bridge
    # Creates a named volume to persist our data. When on a non-Linux OS, the volume's data will be in the Docker VM
    # (e.g., MobyLinuxVM) in /var/lib/docker/volumes/
    volumes:
      postgresVolume:
    

    ログディレクトリへの書き込み権限

    Linuxの場合、ホストのログディレクトリに適切な権限が必要であることに注意してください。そうでない場合、少し誤解を招くエラーが発生します

    致命的:ログファイルを開くことができませんでした "/logs/postgresql-2017-02-04_115222.log":アクセスが拒否されました

    エラーメッセージはコンテナ内のディレクトリを示唆しているので、誤解を招くと言います 実際にはホスト上のディレクトリであるにもかかわらず、間違った権限を持っています 書き込みは許可されていません。

    これを修正するには、

    を使用してホストに正しい権限を設定します
    chgroup ./logs docker && chmod 770 ./logs
    


    1. MySQLiクエリのエラーを表示するにはどうすればよいですか?

    2. JavaでのOracleのRETURNINGINTOの使用法(JDBC、プリペアドステートメント)

    3. IDが存在するときにテーブルの不明な主キーを取得する

    4. PostgreSQLの単一引用符と二重引用符の違いは何ですか?