Error en la canalización de CI / CD con PostgreSQL con el error "La base de datos no está inicializada y la contraseña del superusuario no está especificada"

18

Estoy usando la canalización de Bitbucket con PosgreSQL para CI / CD. De acuerdo con esta documentación, el servicio PostgreSQL se ha descrito de bitbucket-pipelines.ymlesta manera:

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

Funcionó bien hasta ahora. Pero todas mis últimas tuberías fallaron con el siguiente error:

   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

¿Cómo puedo arreglarlo? No hubo cambios en el bitbucket-pipelines.ymlarchivo que podrían ser la razón de tal error.

Neverwalkaloner
fuente

Respuestas:

17

Parece que la razón son las actualizaciones de la imagen del acoplador ( problema de github ). Las últimas versiones no permiten conectarse a DB sin una contraseña desde cualquier lugar. Por lo tanto, debe especificar el nombre de usuario / contraseña:

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

O si aún no desea utilizar la contraseña, puede configurar POSTGRES_HOST_AUTH_METHOD=trustla variable de entorno:

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

Este es un cambio muy reciente, hace aproximadamente una semana. Una forma de evitarlo es codificar su versión de Postgres para que no sea la última, por ejemplo, cambiar a postgres:9.5.18opostgres:9.5.20-alpine

Otra forma es pasar una contraseña falsa:

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

Vea la discusión aquí: https://github.com/docker-library/postgres/issues/681

ehacinom
fuente
1

Si tiene problemas para conectar Django a PostgreSQL a través de Docker por primera vez, agregue el archivo POSTGRES_HOST_AUTH_METHOD: trusta su docker-compose.ymlarchivo:

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

Esto resuelve el problema de conexión para mí.

También tenga en cuenta que "Esto no se recomienda. Consulte la documentación de PostgreSQL sobre" confianza ": https://www.postgresql.org/docs/current/auth-trust.html "

ADRIAN R7Z
fuente
Si esto NO SE RECOMIENDA, ¿por qué sugerirlo? Alertar que no se recomienda es bueno, pero también explica por qué lo sugiere o proporciona una solución alternativa. Definitivamente ayudará. Solo una opinión.
Mono ErroCode-112 encontrado
Un buen trabajo al respecto es especificar una POSTGRES_PASSWORD para el superusuario. Puede usar "-e POSTGRES_PASSWORD = contraseña" para configurarlo en "Docker Run"
ADRIAN R7Z