【问题标题】:Issues with Postgres authentication during integration tests with docker与 docker 集成测试期间 Postgres 身份验证的问题
【发布时间】:2019-01-07 00:26:07
【问题描述】:

问题是在运行集成测试时,我收到此错误:

 error: password authentication failed for user "postgres"
      at Connection.parseE (node_modules/pg/lib/connection.js:567:11)
      at Connection.parseMessage (node_modules/pg/lib/connection.js:391:17)

无论docker-compose.yml 文件中有什么内容,这种情况都会发生 100%。

我正在使用 knex 进行数据库连接,如下所示:

    function getConnectionForDatabase(database) {
     return {
       host: config.get("database.connection.host"),
       user: config.get("database.connection.user"),
       password: config.get("database.connection.password"),
       database: database
     };
   }

   function getDatabaseConnection(database) {
     return knex({
       client: config.get("database.client"),
       connection: getConnectionForDatabase(database),
       debug: config.get("database.debugMode"),
       pool: {
         min: config.get("database.pool.min"),
         max: config.get("database.pool.max")
       }
     });
   }

getDatabaseConnection("postgres");

主机是 127.0.0.1,假设用户名是 postgres,密码是 postgres

docker-compose.yml 包含:

   postgres:
    image: postgres:9.5.4
    command: postgres -D /var/lib/postgresql/data
    volumes:
      - db-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: 'postgres'
      POSTGRES_USER: 'postgres'

我可以使用以下方式手动连接到 postgres 数据库:

docker exec -it <hash> bash
root@<hash>:/# psql -U postgres

我还更新了密码以创建 docker-compose.yml 文件,但它无法连接:

psql -d postgres -c "ALTER USER postgres WITH PASSWORD '&lt;new password&gt;';"

但是,我运行了单元测试...我收到了与上面提到的相同的错误消息!!

我缺少什么来运行这个程序?任何帮助都将不胜感激!

谢谢!

【问题讨论】:

    标签: docker authentication docker-compose knex.js postgresql-9.5


    【解决方案1】:

    尝试使用主机上的psql postgres://postgres:postgres@localhost:5432/database 连接数据库。如果这不起作用,您的 docker psql 服务器有问题。您当前测试连接的方式可能使用 unix 套接字连接服务器,因此它不会验证您的服务器是否通过 TCP 套接字接受连接。

    如果与psql 的TCP 连接工作正常,请尝试打印出您使用的knex 配置,以确保没有undefined 值传递给任何连接属性。首先,您应该尝试使用硬编码参数进行连接,然后再尝试执行更复杂的操作。

    【讨论】:

    • 是的,我检查了配置数据。一切都很好,它不会像未定义的那样出现。将尝试通过我的机器连接到数据库,看看它是否有效!谢谢你的想法。
    • 是否可以删除 Docker 实例的密码要求?意思是在 docker-compose up 过程中将host all all 0.0.0.0/0 md5 切换为trusted。没有看到太多关于如何做到这一点的文档。想知道是否有可能
    猜你喜欢
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多