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