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