archive_command en environnement docker
Aussitôt le achive_mode passé à on, nous avons les journaux (wal) qui déboulent dans $PGDATA/pg_wal
Il convient donc de les copier ailleurs afin de les sauvegarder, et cela se fait habituellement grace au paramètre archive_command.
En environnement dockerisé, cette façon de faire se corse un peu.
Dans mon container docker, j'ai donc
/var/lib/postgresql/data/pg_wal contenant mes wal
J'ai externalisé mon PGDATA via mon fichier docker-compose, ainsi que le répertoire dans lequel je souhaite copier mes wal
Code:
1 2 3
| volumes:
- /DBData/iamictv:/var/lib/postgresql/data:Z
- /DBData/wal:/var/lib/postgresql/wal:Z |
Si je passe le paramètre
Code:
archive_command = 'cp %p /DBData/wal/MonInstance_%f'
je vais logiquement me retrouver avec un message d'erreur
Code:
1 2
| cp: cannot create regular file '/DBData/wal/inst1_000000010000000000000028': No such file or directory
2020-05-06 10:44:16.983 CEST [29] LOG: archive command failed with exit code 1 |
Cela me semble assez logique car c'est Postgresql qui initie la commande cp depuis l'intérieur du container... et le container ne connais pas /DBData... C'et donc dans cette même logique que je modifie mon postgresql.conf de telle sorte
Code:
archive_command = 'cp %p /var/lib/postgresql/wal/inst1_%f'
... et là, bizarre... le chemin semble être trouvé, mais avec un problème de permission
Code:
1 2
| 2020-05-06 10:46:04.538 CEST [30] DETAIL: The failed archive command was: cp pg_wal/00000001000000000000002A /var/lib/postgresql/wal/inst_00000001000000000000002A
cp: failed to access '/var/lib/postgresql/wal/iamictv_00000001000000000000002A': Permission denied |
si je me situe dans le container et que je joue l'ordre de copie, tout se passe pourtant bien (pas trop étonnant puisque je suis root)
Pourtant, autant mon /DBData/wal semble avoir des droits suffisants
Code:
drw-rw-rw-. 2 systemd-bus-proxy root 46 May 6 10:39 wal
autant il semble en être de même à l'intérieur du container
Code:
1 2 3 4 5
| [root@postgresql-t01 inst1]# docker exec -it inst1 bash
root@2cbfa089fb65:/# ls -l /var/lib/postgresql/
total 4
drwx------. 19 postgres root 4096 May 6 10:57 data
drw-rw-rw-. 2 postgres root 46 May 6 10:39 wal |