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.