3
respostas

Erro de conexão com o Postgres

No último laboratório, eu consigo subir todos os serviços da stack, porém, o worker não consegue se conectar com o Postgres. Estou usando esse código para subir o banco:

  db:
    image: postgres:9.5.21
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]

No log do container do banco aparece a seguinte mensagem:

FATAL:  password authentication failed for user "postgres"
DETAIL:  Connection matched pg_hba.conf line 95: "host all all all md5"

No log do container do worker aparece a seguinte mensagem:

Waiting for db

Alguma ideia do que pode estar acontecendo?

3 respostas

Oi César, tudo bem?

Essa mudança de environment você fez depois do exemplo executado em aula?

Oi Daniel! Usando o script padrão da aula, sem as variáveis de ambiente, eu recebo o seguinte erro:

funny_bardeen.1.h9ubbk9kox8m@caju1    | Error: Database is uninitialized and superuser password is not specified.
funny_bardeen.1.h9ubbk9kox8m@caju1    |        You must specify POSTGRES_PASSWORD for the superuser. Use
funny_bardeen.1.h9ubbk9kox8m@caju1    |        "-e POSTGRES_PASSWORD=password" to set it in "docker run".
funny_bardeen.1.h9ubbk9kox8m@caju1    | 
funny_bardeen.1.h9ubbk9kox8m@caju1    |        You may also use POSTGRES_HOST_AUTH_METHOD=trust to allow all connections
funny_bardeen.1.h9ubbk9kox8m@caju1    |        without a password. This is *not* recommended. See PostgreSQL
funny_bardeen.1.h9ubbk9kox8m@caju1    |        documentation about "trust":
funny_bardeen.1.h9ubbk9kox8m@caju1    |        https://www.postgresql.org/docs/current/auth-trust.html
funny_bardeen.1.hachy4ynm237@caju1    | Error: Database is uninitialized and superuser password is not specified.
funny_bardeen.1.hachy4ynm237@caju1    |        You must specify POSTGRES_PASSWORD for the superuser. Use
funny_bardeen.1.hachy4ynm237@caju1    |        "-e POSTGRES_PASSWORD=password" to set it in "docker run".
funny_bardeen.1.hachy4ynm237@caju1    | 
funny_bardeen.1.hachy4ynm237@caju1    |        You may also use POSTGRES_HOST_AUTH_METHOD=trust to allow all connections
funny_bardeen.1.hachy4ynm237@caju1    |        without a password. This is *not* recommended. See PostgreSQL
funny_bardeen.1.hachy4ynm237@caju1    |        documentation about "trust":
funny_bardeen.1.hachy4ynm237@caju1    |        https://www.postgresql.org/docs/current/auth-trust.html
funny_bardeen.1.qn2qguxga5z7@caju1    | Error: Database is uninitialized and superuser password is not specified.
funny_bardeen.1.qn2qguxga5z7@caju1    |        You must specify POSTGRES_PASSWORD for the superuser. Use
funny_bardeen.1.qn2qguxga5z7@

Passar as variáveis de ambiente foi uma sugestão que encontrei em uma discussão no fórum e que foi clocada como solução, mas no meu caso ainda não funcionou.

Opa César, aparentemente houve alguma mudança na biblioteca do Postgres no Docker Hub. Agora é necessário definir a variável de senha.

Altere para o seguinte:

  db:
    image: postgres:9.5.21
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
        POSTGRES_HOST_AUTH_METHOD: trust
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]