将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
相关产品推荐
相关产品推荐

