如何修复.NET Core中“System.ArgumentException: Keyword not supported: 'port'”错误
解决方案
1. 修正PostgreSQL连接字符串格式
错误Keyword not supported: 'port'的核心原因是混用了SQL Server与PostgreSQL的连接字符串语法。ASP.NET Core中使用Npgsql驱动连接PostgreSQL时,需采用PostgreSQL专属格式:
方式一:端口整合到主机地址
修改appsettings.json中的连接字符串:
"ConnectionStrings": { "netcoreapiContext": "Server=postgres_image:5432;Database=gr10_db;Username=gr10;Password=12345678" }
方式二:使用PostgreSQL标准关键字(推荐)
用Host和Port关键字(Npgsql原生支持):
"ConnectionStrings": { "netcoreapiContext": "Host=postgres_image;Port=5432;Database=gr10_db;Username=gr10;Password=12345678" }
2. 修复docker-compose.yml语法与环境变量配置
你的networks配置存在语法错误,同时环境变量键名需符合ASP.NET Core配置规则:
version: '3.4' networks: default: driver: bridge services: netcoreapi: image: netcoreapi:latest depends_on: - "postgres_image" build: context: . dockerfile: Dockerfile ports: - "3000:80" networks: - default environment: ConnectionStrings__netcoreapiContext: "Host=postgres_image;Port=5432;Database=gr10_db;Username=gr10;Password=12345678" postgres_image: image: postgres:latest ports: - "5432:5432" # 明确映射端口,方便本地调试(可选) restart: always volumes: - db_volume:/var/lib/postgresql/data environment: POSTGRES_USER: "gr10" POSTGRES_PASSWORD: "12345678" POSTGRES_DB: "gr10_db" networks: - default volumes: db_volume:
注意:环境变量键名需用ConnectionStrings__netcoreapiContext(双下划线分隔),ASP.NET Core配置系统才能正确识别为连接字符串的覆盖项。
3. 确保应用读取环境变量
在Program.cs中确认配置系统已启用环境变量读取:
var builder = WebApplication.CreateBuilder(args); // 显式启用环境变量读取(默认已包含,显式声明更稳妥) builder.Configuration.AddEnvironmentVariables(); // 配置DbContext使用Npgsql builder.Services.AddDbContext<NetcoreapiContext>(options => options.UseNpgsql(builder.Configuration.GetConnectionString("netcoreapiContext"))); // 其他服务与中间件配置... var app = builder.Build(); app.Run();
补充说明
depends_on仅保证postgres容器优先启动,不保证数据库服务就绪。若需等待数据库完全可用,可添加健康检查或使用wait-for-it等工具。- Docker内部服务通过服务名(
postgres_image)直接通信,无需使用127.0.0.1,二者处于同一自定义网络中。
内容的提问来源于stack exchange,提问作者Turing
相关产品推荐
相关产品推荐

