Wie kann ich die Konfigurationsdatei des offiziellen PostgreSQL Docker-Images anpassen?

99

Ich verwende das offizielle Postgres Docker-Image und versuche, die Konfiguration anzupassen. Zu diesem Zweck verwende ich den Befehl sed, max_connectionsum beispielsweise Folgendes zu ändern :

sed -i -e"s/^max_connections = 100.*$/max_connections = 1000/" /var/lib/postgresql/data/postgresql.conf

Ich habe zwei Methoden ausprobiert, um diese Konfiguration anzuwenden. Zum einen fügen Sie die Befehle einem Skript hinzu und kopieren sie in den Init-Ordner "/docker-entrypoint-initdb.d". Die zweite Methode besteht darin, sie direkt in meiner Docker-Datei mit dem Befehl "RUN" auszuführen (diese Methode funktionierte gut mit einem nicht offiziellen Postgresql-Image mit einem anderen Pfad zur Konfigurationsdatei "/ etc / postgres / ..."). In beiden Fällen schlagen die Änderungen fehl, weil die Konfigurationsdatei fehlt (ich denke, sie wurde noch nicht erstellt).

Wie soll ich die Konfiguration ändern?

Bearbeiten 1:

Hier ist die Docker-Datei, mit der das Bild erstellt wurde:

# Database (http://www.cs3c.ma/)

FROM postgres:9.4
MAINTAINER Sabbane <contact@cs3c.ma>

ENV TERM=xterm

RUN apt-get update
RUN apt-get install -y nano

ADD scripts /scripts
# ADD scripts/setup-my-schema.sh /docker-entrypoint-initdb.d/

# Allow connections from anywhere.
RUN sed -i -e"s/^#listen_addresses =.*$/listen_addresses = '*'/" /var/lib/postgresql/data/postgresql.conf
RUN echo "host    all    all    0.0.0.0/0    md5" >> /var/lib/postgresql/data/pg_hba.conf

# Configure logs
RUN sed -i -e"s/^#logging_collector = off.*$/logging_collector = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_directory = 'pg_log'.*$/log_directory = '\/var\/log\/postgresql'/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_filename = 'postgresql-\%Y-\%m-\%d_\%H\%M\%S.log'.*$/log_filename = 'postgresql_\%a.log'/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_file_mode = 0600.*$/log_file_mode = 0644/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_truncate_on_rotation = off.*$/log_truncate_on_rotation = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_rotation_age = 1d.*$/log_rotation_age = 1d/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_min_duration_statement = -1.*$/log_min_duration_statement = 0/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_checkpoints = off.*$/log_checkpoints = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_connections = off.*$/log_connections = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_disconnections = off.*$/log_disconnections = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^log_line_prefix = '\%t \[\%p-\%l\] \%q\%u@\%d '.*$/log_line_prefix = '\%t \[\%p\]: \[\%l-1\] user=\%u,db=\%d'/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_lock_waits = off.*$/log_lock_waits = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_temp_files = -1.*$/log_temp_files = 0/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#statement_timeout = 0.*$/statement_timeout = 1800000        # in milliseconds, 0 is disabled (current 30min)/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^lc_messages = 'en_US.UTF-8'.*$/lc_messages = 'C'/" /var/lib/postgresql/data/postgresql.conf

# Performance Tuning
RUN sed -i -e"s/^max_connections = 100.*$/max_connections = 1000/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^shared_buffers =.*$/shared_buffers = 16GB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#effective_cache_size = 128MB.*$/effective_cache_size = 48GB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#work_mem = 1MB.*$/work_mem = 16MB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#maintenance_work_mem = 16MB.*$/maintenance_work_mem = 2GB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#checkpoint_segments = .*$/checkpoint_segments = 32/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#checkpoint_completion_target = 0.5.*$/checkpoint_completion_target = 0.7/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#wal_buffers =.*$/wal_buffers = 16MB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#default_statistics_target = 100.*$/default_statistics_target = 100/" /var/lib/postgresql/data/postgresql.conf


VOLUME ["/var/lib/postgresql/data", "/var/log/postgresql"]

CMD ["postgres"]

Mit dieser Docker-Datei zeigt der Erstellungsprozess den Fehler: sed: can't read /var/lib/postgresql/data/postgresql.conf: No such file or directory

Sakr
quelle
1
Eine Methode besteht darin, das offizielle Image zu verwenden, es zu starten, eine Verbindung herzustellen unddocker exec -it container_id bash dann Ihre Änderungen vorzunehmen.docker commit container_id myuser/myimage_myPostegresql:myversion
Dann
2
Ich denke, einer der Vorteile des Docker-Paradigmas besteht darin, den gesamten Erstellungsprozess zu automatisieren. Wie bei einem anderen Bild erwähnt, paintedfox/postgresqlist es möglich, die Konfiguration direkt in der Docker-Datei zu ändern. Ich denke, das sollte auch mit dem offiziellen Bild möglich sein.
Sakr
Die Sed-Methode sollte funktionieren. Können Sie Ihre Dcoker-Datei oder einen vollständigen Reproducer veröffentlichen?
user2915097

Antworten:

52

Das postgres:9.4Bild, von dem Sie geerbt haben, deklariert ein Volume bei /var/lib/postgresql/data. Dies bedeutet im Wesentlichen, dass Sie keine Dateien in diesen Pfad in Ihrem Bild kopieren können. Die Änderungen werden verworfen.

Sie haben einige Möglichkeiten:

  • Sie können einfach Ihre eigenen Konfigurationsdateien als Volume zur Laufzeit mit hinzufügen docker run -v postgresql.conf:/var/lib/postgresql/data/postgresql.conf .... Ich bin mir jedoch nicht sicher, wie genau dies mit dem vorhandenen Volume interagieren wird.

  • Sie können die Datei kopieren, wenn der Container gestartet wird. Kopieren Sie dazu Ihre Datei in den Build an einem Ort, der sich nicht unter dem Volume befindet, und rufen Sie dann vom Einstiegspunkt oder cmd aus ein Skript auf, das die Datei an den richtigen Ort kopiert und postgres startet.

  • Klonen Sie das Projekt hinter dem offiziellen Postgres-Image und bearbeiten Sie die Docker-Datei, um Ihre eigene Konfigurationsdatei hinzuzufügen, bevor VOLUME deklariert wird (alles, was hinzugefügt wird, bevor die VOLUME-Anweisung zur Laufzeit automatisch kopiert wird).

  • Übergeben Sie alle Konfigurationsänderungen in der Befehlsoption in der Docker-Compose-Datei

mögen:

services:
  postgres:
    ...  
    command:
      - "postgres"
      - "-c"
      - "max_connections=1000"
      - "-c"
      - "shared_buffers=3GB"
      - "-c"
      ...
Adrian Mouat
quelle
3
Das war es, die Änderungen sollten nicht in der Docker-Datei sein. Ich habe sie in ein Skript verschoben und es vom Einstiegspunkt aus aufgerufen, und es hat jetzt gut funktioniert. Danke für die Antwort.
Sakr
5
Ich habe das Skript gerade in den Init-Ordner "/docker-entrypoint-initdb.d/" kopiert und diesmal hat es auch gut funktioniert. Das ist seltsam, aber es scheint, dass ich mich so darauf konzentriert habe, das Bild mit der Docker-Datei festzulegen, wie ich es bei den meisten Bildern gewohnt bin, dass ich bei meinen ersten Versuchen mit dem Init-Skript etwas verpasst habe.
Sakr
"Dies bedeutet im Wesentlichen, dass Sie keine Dateien in diesen Pfad in Ihrem Bild kopieren können. Die Änderungen werden verworfen." Könnten Sie bitte erklären, warum dies der Fall ist?
isco
@isco Bände in den offiziellen Dokumenten nachschlagen. Grundsätzlich werden Volumes nicht im Image, sondern auf dem Host gespeichert, sodass die Daten auf dem Host und nicht im Image gespeichert werden. Sie müssen den Container mit demselben angehängten Volume starten, um die Daten zu behalten.
Adrian Mouat
Ich ändere in /var/lib/postgres/data/pg_hba.conf für nur akzeptieren Verbindung ist Host alle alle 192.168.0.0/0 md5 und Kommentar Host alle alle alle md5 (ist Standard). Aber den Effekt nicht ändern
Lucas Resende
82

Mit Docker Compose

Wenn Sie mit Docker Compose arbeiten, können command: postgres -c option=valueSie docker-compose.ymlPostgres in Ihrem konfigurieren.

Dadurch wird Postgres beispielsweise in einer Datei protokolliert:

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

Wenn Sie die Antwort von Vojtech Vitek anpassen , können Sie verwenden

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

Zum Ändern der Konfigurationsdatei wird Postgres verwendet. Sie würden Ihre benutzerdefinierte Konfigurationsdatei mit einem Volume bereitstellen:

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

Hier ist die docker-compose.ymlmeiner Anwendung, die zeigt, wie Postgres konfiguriert wird:

# 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
       - 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:

Berechtigung zum Schreiben in das Protokollverzeichnis

Beachten Sie, dass unter Linux das Protokollverzeichnis auf dem Host über die richtigen Berechtigungen verfügen muss. Andernfalls wird der leicht irreführende Fehler angezeigt

FATAL: Protokolldatei "/logs/postgresql-2017-02-04_115222.log" konnte nicht geöffnet werden: Berechtigung verweigert

Ich sage irreführend, da die Fehlermeldung darauf hinweist, dass das Verzeichnis im Container die falsche Berechtigung hat, obwohl das Verzeichnis auf dem Host in Wirklichkeit kein Schreiben zulässt.

Um dies zu beheben, habe ich mit die richtigen Berechtigungen für den Host festgelegt

chgroup ./logs docker && chmod 770 ./logs
Matthias Braun
quelle
Würden Sie empfehlen, ein Postgres-Protokoll in einer Datei zu erstellen, anstatt stdout, und Docker-Protokollbefehle zu verwenden, um damit umzugehen? Ein großes Lob für die Vernetzung in der Github-Ausgabe !
JPIC
1
Ich bin nicht entschieden, ob die Protokollierung in einer Datei oder die Verwendung von Docker-Protokollen vorzuziehen ist, jpic.
Matthias Braun
Sie haben das Passwort hinzugefügt, das Sie wahrscheinlich hier maskieren möchten
vidstige
3
@vidstige: Ich verwende diese zufällige Zeichenfolge nicht als Passwort, sondern nur zur Demonstration.
Matthias Braun
1
@Gherman: Hast du das zu deiner Docker-Datei hinzugefügt? Weil du nicht solltest. Meine Antwort verwendet docker-compose.yml.
Matthias Braun
39

Injizieren Sie die benutzerdefinierte postgresql.conf in den postgres Docker-Container

Die Standarddatei befindet sich postgresql.confin PGDATAdir ( /var/lib/postgresql/data), was die Sache insbesondere beim erstmaligen Ausführen des Postgres-Containers komplizierter macht, da der docker-entrypoint.shWrapper den initdbSchritt zur PGDATADir-Initialisierung aufruft .

Um die PostgreSQL-Konfiguration in Docker konsistent anzupassen, empfehle ich die Verwendung der config_fileOption postgres zusammen mit Docker-Volumes wie folgt:

Produktionsdatenbank (PGDATA-Verzeichnis als beständiges Volume)

docker run -d \
-v $CUSTOM_CONFIG:/etc/postgresql.conf \
-v $CUSTOM_DATADIR:/var/lib/postgresql/data \
-e POSTGRES_USER=postgres \
-p 5432:5432 \
--name postgres \
postgres:9.6 postgres -c config_file=/etc/postgresql.conf

Datenbank testen (PGDATA-Verzeichnis wird danach verworfen docker rm)

docker run -d \
-v $CUSTOM_CONFIG:/etc/postgresql.conf \
-e POSTGRES_USER=postgres \
--name postgres \
postgres:9.6 postgres -c config_file=/etc/postgresql.conf

Debuggen

  1. Entfernen Sie den Befehl -d(Option trennen) aus docker run, um die Serverprotokolle direkt anzuzeigen.
  2. Stellen Sie mit dem psql-Client eine Verbindung zum Postgres-Server her und fragen Sie die Konfiguration ab:

    docker run -it --rm --link postgres:postgres postgres:9.6 sh -c 'exec psql -h $POSTGRES_PORT_5432_TCP_ADDR -p $POSTGRES_PORT_5432_TCP_PORT -U postgres'
    
    psql (9.6.0)
    Type "help" for help.
    
    postgres=# SHOW all;
Vojtech Vitek
quelle
29

Wenn Sie den offiziellen Einstiegspunkt laufen (AKA , wenn Sie die Container starten), läuft es initdbin $PGDATA( /var/lib/postgresql/dataStandardeinstellung), und speichert es dann in diesem Verzeichnis dieser 2 - Dateien:

  • postgresql.conf mit manuellen Standardeinstellungen.
  • postgresql.auto.confmit Einstellungen, die automatisch mit ALTER SYSTEMBefehlen überschrieben werden.

Der Einstiegspunkt führt auch alle /docker-entrypoint-initdb.d/*.{sh,sql}Dateien aus.

All dies bedeutet, dass Sie in diesem Ordner ein Shell- / SQL-Skript bereitstellen können, das den Server für den nächsten Start konfiguriert (unmittelbar nach der DB-Initialisierung oder beim nächsten Start des Containers).

Beispiel:

conf.sql Datei:

ALTER SYSTEM SET max_connections = 6;
ALTER SYSTEM RESET shared_buffers;

Dockerfile Datei:

FROM posgres:9.6-alpine
COPY *.sql /docker-entrypoint-initdb.d/
RUN chmod a+r /docker-entrypoint-initdb.d/*

Und dann müssen Sie conf.sqlmanuell in bereits vorhandenen Datenbanken ausführen . Da die Konfiguration auf dem Volume gespeichert ist, überlebt sie Neuerstellungen.


Eine andere Alternative besteht darin, die -cFlagge so oft zu übergeben, wie Sie möchten:

docker container run -d postgres -c max_connections=6 -c log_lock_waits=on

Auf diese Weise müssen Sie kein neues Image erstellen und sich nicht um bereits vorhandene oder nicht vorhandene Datenbanken kümmern. alles wird betroffen sein.

Yajo
quelle
2
Dieser letzte, der -c passiert, ist mein Favorit. Dies ist so sauber und einfach für verschiedene Umgebungen zu generieren.
epic_fil
10

Sie können Ihre benutzerdefinierte postgresql.confDatei in eine temporäre Datei im Container einfügen und die Standardkonfiguration zur Laufzeit überschreiben.

Das zu tun :

  • Kopieren Sie Ihre benutzerdefinierte postgresql.confin Ihren Container
  • Kopieren Sie die updateConfig.shDatei in/docker-entrypoint-initdb.d/

Dockerfile

FROM postgres:9.6

COPY postgresql.conf      /tmp/postgresql.conf
COPY updateConfig.sh      /docker-entrypoint-initdb.d/_updateConfig.sh

updateConfig.sh

#!/usr/bin/env bash

cat /tmp/postgresql.conf > /var/lib/postgresql/data/postgresql.conf

Zur Laufzeit führt der Container das Skript im Inneren aus /docker-entrypoint-initdb.d/und überschreibt die Standardkonfiguration mit Ihrer benutzerdefinierten.

Alphayax
quelle
Warum das "_" im zweiten Kopierbefehl? sollte es nicht sein : /docker-entrypoint-initdb.d/updateConfig.sh?
Fernando Castilla Ospina
3
Dies liegt daran, dass der Ordner docker-entrypoint-initdb.d / Skripte in alphabetischer Reihenfolge ausführt. Und ich möchte dieses Skript vor den anderen anwenden.
Alphayax
tnx ich habe vergessen, dass die Kopie die Datei umbenannt hat, um den Unterstrich zu verwenden
Fernando Castilla Ospina
9

Ich habe alle Antworten durchgesehen und es gibt noch eine andere Option. Sie können Ihren CMD-Wert in der Docker-Datei ändern (dies ist nicht der beste, aber dennoch mögliche Weg, um Ihr Ziel zu erreichen).

Grundsätzlich müssen wir

  • Kopieren Sie die Konfigurationsdatei in den Docker-Container
  • Postgres-Startoptionen überschreiben

Beispiel für eine Docker-Datei:

FROM postgres:9.6
USER postgres

# Copy postgres config file into container
COPY postgresql.conf /etc/postgresql

# Override default postgres config file
CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]

Obwohl ich denke, dass die Verwendung command: postgres -c config_file=/etc/postgresql/postgresql.confin Ihrer docker-compose.ymlvon Matthias Braun vorgeschlagenen Datei die beste Option ist.

Dr. Botwing
quelle
2

Eine relativ einfache Lösung für dieses Problem scheint darin zu bestehen, den Dienst (ich verwende Swarm für AWS und eine Yaml-Datei) mit Ihren Datenbankdateien zu deklarieren, die auf einem dauerhaften Volume bereitgestellt sind (hier AWS EFS, wie vom Cloudstor: aws-Treiber angegeben) Spezifikation).

  version: '3.3'
  services:
    database:
      image: postgres:latest
      volumes:
        - postgresql:/var/lib/postgresql
        - postgresql_data:/var/lib/postgresql/data
    volumes:
       postgresql:
         driver: "cloudstor:aws" 
       postgresql_data:
         driver: "cloudstor:aws"
  1. Die Datenbank wird mit den Standardeinstellungen des Bildes initialisiert.
  2. Sie bearbeiten die conf-Einstellungen im Container, z. B. wenn Sie die maximale Anzahl gleichzeitiger Verbindungen erhöhen möchten, für die ein Neustart erforderlich ist
  3. Stoppen Sie den laufenden Container (oder skalieren Sie den Dienst auf Null und dann wieder auf Eins).
  4. Der Schwarm erzeugt einen neuen Container, der diesmal Ihre Einstellungen für die persistente Konfiguration aufnimmt und sie fröhlich anwendet.

Ein angenehmer Nebeneffekt beim Beibehalten Ihrer Konfiguration ist, dass auch Ihre Datenbanken beibehalten werden (oder war es umgekehrt) ;-)

Eoan
quelle
2

Meine Lösung richtet sich an Kollegen, die Änderungen an der Konfiguration vornehmen müssen, bevor sie docker-entrypoint-initdb.d starten

Ich musste die Einstellung 'shared_preload_libraries' ändern, damit postgres während der Arbeit bereits eine neue Bibliothek vorinstalliert hat und der Code in docker-entrypoint-initdb.d sie verwenden kann.

Also habe ich gerade die Datei postgresql.conf.sample in Dockerfile gepatcht:

RUN echo "shared_preload_libraries='citus,pg_cron'" >> /usr/share/postgresql/postgresql.conf.sample
RUN echo "cron.database_name='newbie'" >> /usr/share/postgresql/postgresql.conf.sample

Und mit diesem Patch wird es möglich, eine Erweiterung in der SQL-Datei in docker-entrypoint-initdb.d /: hinzuzufügen.

CREATE EXTENSION pg_cron;
40min
quelle
1

Das funktioniert bei mir:

FROM postgres:9.6
USER postgres

# Copy postgres config file into container
COPY postgresql.conf /etc/postgresql

# Override default postgres config file
CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]
Guillermo Solis
quelle
Warum erhielt dies keine positiven Stimmen? Es ist der vernünftigste Vorschlag hier ... Danke.
Paflow
0

Mit Docker Compose können Sie ein Volume mit mounten postgresql.auto.conf. Beispiel:

version: '2'

services:
  db:
    image: postgres:10.9-alpine
    volumes:
      - postgres:/var/lib/postgresql/data:z
      - ./docker/postgres/postgresql.auto.conf:/var/lib/postgresql/data/postgresql.auto.conf
    ports:
      - 5432:5432
Kahl
quelle
Sie sollten das nicht bearbeiten, postgresql.auto.confda es überschrieben wird. Verwenden Sie die postgresql.confam selben Ort.
Baschdl
0

Ich habe auch das offizielle image ( FROM postgres) verwendet und konnte die Konfiguration durch Ausführen der folgenden Befehle ändern.

Als erstes müssen Sie die PostgreSQL-Konfigurationsdatei suchen. Dies kann durch Ausführen dieses Befehls in Ihrer laufenden Datenbank erfolgen.

SHOW config_file;

Ich mein Fall es kehrt zurück /data/postgres/postgresql.conf.

Der nächste Schritt besteht darin, herauszufinden, was der Hash Ihres laufenden PostgreSQL-Docker-Containers ist.

docker ps -a

Dies sollte eine Liste aller laufenden Container zurückgeben. In meinem Fall sieht es so aus.

...
0ba35e5427d9    postgres    "docker-entrypoint.s…" ....
...

Jetzt müssen Sie zur Bash in Ihrem Container wechseln, indem Sie Folgendes ausführen:

docker exec -it 0ba35e5427d9 /bin/bash

Überprüfen Sie im Container, ob sich die Konfiguration im richtigen Pfad befindet, und zeigen Sie sie an.

cat /data/postgres/postgresql.conf

Ich wollte die maximale Anzahl von Verbindungen von 100 auf 1000 und den gemeinsam genutzten Puffer von 128 MB auf 3 GB ändern. Mit dem Befehl sed kann ich in der Konfiguration suchen und durch die entsprechenden Variablen ersetzen.

sed -i -e"s/^max_connections = 100.*$/max_connections = 1000/" /data/postgres/postgresql.conf
sed -i -e"s/^shared_buffers = 128MB.*$/shared_buffers = 3GB/" /data/postgres/postgresql.conf

Als letztes müssen wir die Datenbank im Container neu starten. Finden Sie heraus, welche Version von PostGres Sie verwenden.

cd /usr/lib/postgresql/
ls 

In meinem Fall ist es 12 so, dass Sie die Datenbank jetzt neu starten können, indem Sie den folgenden Befehl mit der richtigen Version ausführen.

su - postgres -c "PGDATA=$PGDATA /usr/lib/postgresql/12/bin/pg_ctl -w restart"
Sebastian
quelle