Cela fait quelques que temps que je n’utilise plus Nginx Proxy Manager comme reverse proxy, mais uniquement pour le renouvellement automatique de quelques certificats Let’s Encrypt isolés. Malgré tout, il y a quelques temps j’ai dû réaliser un upgrade de la base PostgreSQL17 vers PostgreSQL18 reliée à cette instance via docker. Voila comment je m’y suis pris (la méthode est applicable potentiellement à toutes vos petites instances PostgreSQL mono container que ce soit sur docker ou sur kube).
Il faut extraire les données de l’instance docker postgresql17 : la première chose à faire est de faire un dump complet de votre instance PostgreSQL existante vers un fichier pour l’injecter dans la future.
On démarre un conteneur qui utilise le volume postgresql de l’ancienne instance :
|
1 2 3 4 5 6 7 8 9 |
docker run --name=postgres17 -e "POSTGRES_DB=npm" -e "POSTGRES_USER=npm" -e "POSTGRES_PASSWORD=XXXXXXXXXXX" -v ./postgres:/var/lib/postgresql/data postgres:17 PostgreSQL Database directory appears to contain a database; Skipping initialization 2025-11-10 07:36:56.552 UTC [1] LOG: starting PostgreSQL 17.6 (Debian 17.6-2.pgdg13+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit 2025-11-10 07:36:56.552 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 2025-11-10 07:36:56.552 UTC [1] LOG: listening on IPv6 address "::", port 5432 2025-11-10 07:36:56.554 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" 2025-11-10 07:36:56.558 UTC [29] LOG: database system was shut down at 2025-11-09 19:34:44 UTC 2025-11-10 07:36:56.565 UTC [1] LOG: database system is ready to accept connections |
Ensuite on lance le dump à l’intérieur du conteneur, en utilisant le volume déjà monté :
|
1 |
docker exec -it postgres17 bash<br>root@f6c16d85aee5:/# pg_dumpall -U npm >/var/lib/postgresql/data/dump.psql |
Le dump se retrouve à la racine du volume attaché au conteneur. Donc on peut facilement le récupérer désormais :
|
1 2 3 |
docker cp postgres17:/var/lib/postgresql/dump.psql dump.psql Successfully copied 63.05kB to dump.sql |
Ensuite, il ne reste plus qu’à lancer une nouvelle instance vierge et ré-injecter le dump dans la nouvelle base :
|
1 2 3 |
docker run --name=postgreslatest -e "POSTGRES_DB=npm" -e "POSTGRES_USER=npm" -e "POSTGRES_PASSWORD=XXXXXXXXXXX" -v ./postgres.new:/var/lib/postgresql postgres:latest cat dump.psql | docker exec -i postgreslatest psql -U npm |
Et hop là, vous avez une instance toute neuve !
Biensur je vous ai donnez le détail des étapes, mais il y a facilement moyen via des pipes en série de faire cela en une seul fois ou presque via du docker xxx | docker yyy … je vous laisse optimiser tout cela par rapport à votre expertise du sujet 🙂
Amusez-vous bien !
