Le pipeline CI / CD avec PostgreSQL a échoué avec l'erreur «La base de données n'est pas initialisée et le mot de passe du superutilisateur n'est pas spécifié»

18

J'utilise le pipeline Bitbucket avec PosgreSQL pour CI / CD. Selon cette documentation, le service PostgreSQL a été décrit de bitbucket-pipelines.ymlcette manière:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine

Cela a très bien fonctionné jusqu'à présent. Mais tous mes derniers pipelines ont échoué avec l'erreur suivante:

   Error: Database is uninitialized and superuser password is not specified.
   You must specify POSTGRES_PASSWORD for the superuser. Use
   "-e POSTGRES_PASSWORD=password" to set it in "docker run".

   You may also use POSTGRES_HOST_AUTH_METHOD=trust to allow all connections
   without a password. This is *not* recommended. See PostgreSQL
   documentation about "trust":
   https://www.postgresql.org/docs/current/auth-trust.html

Comment puis-je le réparer? Il n'y a eu aucun changement dans le bitbucket-pipelines.ymlfichier qui pourrait être la raison d'une telle erreur.

Neverwalkaloner
la source

Réponses:

17

On dirait que la raison est les mises à jour de l'image docker ( problème github ). Les dernières versions ne permettent pas de se connecter à DB sans mot de passe de n'importe où. Vous devez donc spécifier un nom d'utilisateur / mot de passe:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine
      environment:
         POSTGRES_DB: pipelines
         POSTGRES_USER: test_user
         POSTGRES_PASSWORD: test_user_password

Ou si vous ne voulez toujours pas utiliser de mot de passe, vous pouvez simplement définir POSTGRES_HOST_AUTH_METHOD=trustla variable d'environnement:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine
      environment:
        POSTGRES_HOST_AUTH_METHOD: trust
Neverwalkaloner
la source
4

Il s'agit d'un changement très récent, il y a environ une semaine. Une façon de l' éviter est de coder votre version postgres pour ne pas la dernière, par exemple en train de changer pour postgres:9.5.18oupostgres:9.5.20-alpine

Une autre façon est de passer un faux mot de passe:

services:
  db:
    image: postgres
    ports:
      - "8001:5432"
    environment:
      - POSTGRES_PASSWORD=fake_password

Voir la discussion ici: https://github.com/docker-library/postgres/issues/681

ehacinom
la source
1

Si vous rencontrez des problèmes pour connecter Django à PostgreSQL via Docker pour la première fois, ajoutez le POSTGRES_HOST_AUTH_METHOD: trustà votre docker-compose.ymlfichier:

db: image: postgres:11 environment: POSTGRES_HOST_AUTH_METHOD: trust

Cela résout le problème de connexion pour moi.

Veuillez également noter que "Ceci n'est pas recommandé. Voir la documentation PostgreSQL sur la" confiance ": https://www.postgresql.org/docs/current/auth-trust.html "

ADRIAN R7Z
la source
si cela N'EST PAS RECOMMANDÉ, pourquoi le suggérer? Avertir qu'il n'est pas recommandé est une bonne chose, mais aussi fournir la raison pour laquelle vous le suggérez ou fournir une solution. Aidera certainement. Juste une opinion.
Singe ErroCode-112 trouvé le
Un bon travail autour de cela consiste à spécifier un POSTGRES_PASSWORD pour le superutilisateur. Vous pouvez utiliser "-e POSTGRES_PASSWORD = mot de passe" pour le définir dans "docker run"
ADRIAN R7Z