Met Docker Compose
Wanneer u met Docker Compose werkt, kunt u command: postgres -c option=value
in uw docker-compose.yml
om Postgres te configureren.
Hierdoor logt Postgres bijvoorbeeld in een bestand:
command: postgres -c logging_collector=on -c log_destination=stderr -c log_directory=/logs
Door het antwoord van Vojtech Vitek aan te passen, kunt u
command: postgres -c config_file=/etc/postgresql.conf
om het configuratiebestand te wijzigen dat Postgres zal gebruiken. U koppelt uw aangepaste configuratiebestand aan een volume:
volumes:
- ./customPostgresql.conf:/etc/postgresql.conf
Hier is de docker-compose.yml
van mijn applicatie, die laat zien hoe je Postgres configureert:
# 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:
Toestemming om naar de logmap te schrijven
Merk op dat bij Linux de logmap op de host de juiste rechten moet hebben. Anders krijg je de enigszins misleidende foutmelding
FATAL:kan logbestand niet openen"/logs/postgresql-2017-02-04_115222.log":Toestemming geweigerd
Ik zeg misleidend, omdat de foutmelding suggereert dat de map in de container heeft de verkeerde toestemming, terwijl in werkelijkheid de directory op de host staat schrijven niet toe.
Om dit op te lossen, heb ik de juiste rechten op de host ingesteld met
chgroup ./logs docker && chmod 770 ./logs