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

将C# ASP.NET MVC应用连接Docker PostgreSQL容器时遇密码验证失败

问题解决步骤

1. 修复密码认证失败问题

检查用户加密方式

进入PostgreSQL容器的命令行:

docker exec -it postgres-newtester psql -U postgres

执行SQL查询查看用户的密码加密类型:

SELECT usename, passwd FROM pg_shadow WHERE usename = 'amaranth_test_user';
  • 若passwd字段以SCRAM-SHA-256开头,说明使用SCRAM认证;若以md5开头则为MD5认证。

匹配认证配置策略

编辑PostgreSQL的认证规则文件:

docker exec -it postgres-newtester vi /var/lib/postgresql/data/pg_hba.conf

找到IPv4本地连接的配置行:

# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256

将该行的认证方式修改为与用户加密类型一致的值(scram-sha-256或md5),保存后重启容器:

docker restart postgres-newtester

修正连接字符串

确保连接字符串使用amaranth_test_user的专属密码(无需使用postgres用户的密码):

"ConnectionStrings": {
    "db": "Host=localhost;Port=5432;Database=amaranth_tests;Username=amaranth_test_user;Password=amaranth_test_userPW1"
}

重新执行命令:

dotnet restore
dotnet ef database update

2. 更简便的操作方式

使用Docker Compose一键完成PostgreSQL的初始化,无需手动进入容器执行SQL命令:

编写docker-compose.yml

version: '3.8'
services:
  postgres:
    image: postgres:latest
    container_name: postgres-newtester
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: amaranth_test_user
      POSTGRES_PASSWORD: amaranth_test_userPW1
      POSTGRES_DB: amaranth_tests
    volumes:
      - postgres_test_data:/var/lib/postgresql/data
volumes:
  postgres_test_data:

启动容器

在docker-compose.yml所在目录执行:

docker-compose up -d

PostgreSQL会自动创建指定的用户、数据库并配置权限,直接使用对应连接字符串即可执行dotnet ef database update。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:06:28