You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用diesel-cli连接Docker部署的PostgreSQL时出现认证错误

问题原因及解决方法

核心原因

PostgreSQL容器的初始化逻辑是只在第一次启动且数据卷为空时执行用户、数据库的创建。如果你之前启动过这个容器,即使后来修改了docker-compose.yaml里的环境变量,数据卷里已经保留了默认的postgres用户配置,新的username用户根本没被创建,所以用username登录会失败,反而默认的postgres用户能正常登录。

解决步骤

  1. 彻底清理旧容器和数据卷
    执行命令删除容器及关联的数据卷,确保下次启动时会重新初始化:

    docker-compose down -v
    

    然后重新启动容器:

    docker-compose up -d
    
  2. 验证用户和数据库是否正确创建
    进入容器内部验证:

    docker exec -it to-do-postgres bash
    

    用自定义用户登录PostgreSQL:

    psql -U username -d to_do_db
    

    如果能成功进入数据库命令行,说明用户创建正常。

  3. 重新执行Diesel命令
    回到项目目录,用原来的.env配置执行:

    diesel setup
    

额外排查点

如果还是报错,检查本地是否运行了PostgreSQL服务:

  • 本地PostgreSQL会占用5432端口,导致你连接的是本地数据库而非容器内的。此时可以:
    • 停止本地PostgreSQL服务;
    • 或者修改docker-compose.yaml的端口映射为5433:5432,同时更新.env里的DATABASE_URL为:
      DATABASE_URL=postgres://username:password@localhost:5433/to_do_db
      

关于用postgres用户能连接但迁移失败的原因

默认的postgres用户是超级用户,能连接数据库,但你的迁移脚本大概率是针对to_do_db和username用户设计的,后续迁移时会因为权限不足、数据库所有者不匹配等问题导致执行失败,所以必须用你自定义的username用户来操作。

内容的提问来源于stack exchange,提问作者SinxroFozotron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:15:36