Questions fréquentes
Une ou plusieurs images PostgreSQL ne démarrent plus
Il arrive qu’à l’arrêt (très souvent non prévu) de la stack Datachain, la base de données peut ne plus démarrer, avec comme log d’erreur :
2023-03-24 11:12:35.314 CET [24] LOG: le système de bases de données a été arrêté à 2023-03-17 06:04:58 CET
2023-03-24 11:12:35.314 CET [24] LOG: identifiant du gestionnaire de ressource invalide dans l'enregistrement primaire du point de vérification
2023-03-24 11:12:35.314 CET [24] PANIC: n'a pas pu localiser un enregistrement d'un point de vérification valide
Dans ce cas, procédez comme suit :
-
sur la machine ou se trouve le PostgreSQL, identifier le répertoire des data de PostgreSQL :
-
soit c’est un nom de volume monté sur la machine et il est dans le fichier de déploiement docker-compose
-
soit c’est un volume docker, et il se trouve dans /var/lib/docker/volumes/NOM_DE_STACK_NOM_DU_VOLUME/_data (nom de stack issue du démarrage (up.sh ?), et nom du volume le volume dans le fichier docker-compose (potentiellement pg_data). La commande 'docker volume ls' permettra de valider que c’est le bon nom de volume. Exemple sur un fichier :
-
version: "3.7" services: dc_pg: image: dc/pg:dev networks: dc_network: aliases: - dc-pg deploy: mode: replicated replicas: 1 volumes: - pg_data:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=adobis ...
Si le nom de la stack est datachain, alors le volume sera datachain_pg_data, et le chemin /var/lib/docker/volumes/datachain_pg_data/_data.
-
Lorsque le chemin est validé, arrêter la stack.
-
Sur la machine du postgres ciblé, executer la commande suivante.
docker run -it -u postgres -v /var/lib/docker/volumes/datachain_pg_data/_data/:/var/lib/postgresql/data ${REGISTRY}/dc/pg:7.6.0 pg_resetwal /var/lib/postgresql/data/
A noter : vous pourriez utiliser l’image postgres standard 12, cela fonctionnerait aussi. * Redémarrer la stack.
Je souhaite supprimer les mots de passe des fichiers de déploiement docker-compose.yml. Comment puis-je faire ?
Dans swarm, tous les mots de passe de datachain peuvent être stockés directement au niveau du cluster swarm dans "docker secret".
Les variables d’environnement Datachain qui contiennent des mots de passe, ont pour la plupart une seconde variable suffixée par _FILE. La procédure de stockage d’un mot de passe va être la suivante :
-
création du secret dans docker depuis le manager Swarm
$ printf "my super secret password" | docker secret create my_secret -
-
utilisation de ce secret dans le fichier de déploiement (ou le fichier .en, selon votre préférence) et remplacement de la variable d’environnement par la variable suffixée.
version: "3.7"
services:
...
dc_pg_migration:
image: dc/pg_migration:dev
networks:
dc_network:
aliases:
- dc-pg-migration
environment:
- PG_HOST=dc-pg
- PG_PASSWORD=12345
deploy:
restart_policy:
condition: none
volumes:
- pg_dump:/data/pg_dump
devient
version: "3.7"
services:
...
dc_pg_migration:
image: dc/pg_migration:dev
networks:
dc_network:
aliases:
- dc-pg-migration
environment:
- PG_HOST=dc-pg
- PG_PASSWORD_FILE=/run/secrets/pg_password
- PG_EXPOSE_PASSWORD_FILE=/run/secrets/pg_password
- PG_KC_PASSWORD_FILE=/run/secrets/pg_password
deploy:
restart_policy:
condition: none
volumes:
- pg_dump:/data/pg_dump
secrets:
- pg_password
...
secrets:
pg_password:
external: true
-
Les variables d’environnement sont précisés dans la page dédiée.