PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да персонализирате конфигурационния файл на официалното изображение на PostgreSQL Docker?

С Docker Compose

Когато работите с 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избиране на всички записи с SQL LIMIT и OFFSET заявка

  2. стартиране на postgresql и pgadmin в windows без инсталация

  3. Стойност NULL на функцията Postgres за ред, който препраща към НОВО

  4. Как да групирате по месеци в PostgreSQL

  5. Управление на PostgreSQL Commitfest