PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara menyesuaikan file konfigurasi gambar Docker PostgreSQL resmi?

Dengan Penulisan Docker

Saat bekerja dengan Docker Compose, Anda dapat menggunakan command: postgres -c option=value di docker-compose.yml . Anda untuk mengonfigurasi Postgres.

Misalnya, ini membuat Postgres log ke file:

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

Mengadaptasi jawaban Vojtech Vitek, Anda dapat menggunakan

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

untuk mengubah file konfigurasi yang akan digunakan Postgres. Anda akan memasang file konfigurasi khusus dengan volume:

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

Berikut docker-compose.yml dari aplikasi saya, menunjukkan cara mengonfigurasi 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:

Izin untuk menulis ke direktori log

Perhatikan bahwa ketika di Linux, direktori log pada host harus memiliki izin yang tepat. Jika tidak, Anda akan mendapatkan kesalahan yang sedikit menyesatkan

FATAL:tidak dapat membuka file log"/logs/postgresql-2017-02-04_115222.log":Izin ditolak

Saya katakan menyesatkan, karena pesan kesalahan menunjukkan bahwa direktori di dalam wadah memiliki izin yang salah, padahal sebenarnya direktori di host tidak mengizinkan penulisan.

Untuk memperbaikinya, saya menyetel izin yang benar pada host menggunakan

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. Docker - Bagaimana menjalankan perintah psql di wadah postgres?

  2. Pesan kesalahan SQLAlchemy yang aneh:TypeError:objek 'dict' tidak mendukung pengindeksan

  3. Bagaimana cara mencocokkan satu hari penuh dengan bidang datetime?

  4. 3 Cara Mendaftar semua Prosedur Tersimpan dalam Database PostgreSQL

  5. Hasilkan objek `DataSource` untuk Postgres JDBC, secara terprogram