Entity Framework 使用 dockerized postgresql 镜像的核心迁移。没有这样的主机是已知的异常

Entity Framework Core migrations using dockerized postgresql image. No such host is known exception

在我的 aspnet.core 项目中,我想使用我的 dockerized postgresql 镜像。
容器 运行ning 正确。 (我正在使用 Windows 但在 ubuntu18.04 服务器上使用服务器 运行ning)

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    a01980eb90bc        postgres:11.4       "docker-entrypoint.s…"   11 minutes ago      Up 11 minutes       0.0.0.0:5432->5432/tcp   pg

appsettings.json 文件看起来像

    "ConnectionStrings": {
        "LibvirtConnection": "User ID =postgres;Password=*****;Server=185.22.98.7:5432;Port=5432;Database=libvirt;Integrated Security=true;Pooling=true;"
      },

启动class看起来像

   public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
                services.AddEntityFrameworkNpgsql().AddDbContext<AppDbContext>(opt =>
                    opt.UseNpgsql(Configuration.GetConnectionString("LibvirtConnection")));
            }

我在尝试 运行 dotnet ef 数据库更新时出现异常

    dotnet ef database update
    info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
          Entity Framework Core 2.2.6-servicing-10079 initialized 'AppDbContext' using provider 'Npgsql.EntityFrameworkCore.PostgreSQL' with options: None
    System.Net.Sockets.SocketException (11001): No such host is known
       at System.Net.Dns.InternalGetHostByName(String hostName)
       at System.Net.Dns.GetHostAddresses(String hostNameOrAddress)
       at Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout) in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 663
       at Npgsql.NpgsqlConnector.RawOpen(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 555
       at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 414
       at Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnection.cs:line 273
    --- End of stack trace from previous location where exception was thrown ---
       at Npgsql.NpgsqlConnection.Open() in C:\projects\npgsql\src\Npgsql\NpgsqlConnection.cs:line 153
       at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists() in C:\projects\npgsql-entityframeworkcore-postgresql\src\EFCore.PG\S   at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists() in C:\projects\npgsql-entityframeworkcore-postgresql\src\EFCore.PG\Storage\Internal\NpgsqlDatabaseCreator.cs:line 190
       at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
       at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
       at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
       at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_1.<.ctor>b__0()
       at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
    No such host is known

原因是我将我的服务器和端口组合在一起

之前: Server=185.22.98.7:5432;Port=5432

之后: Server=185.22.98.7;Port=5432

System.Net.Sockets.SocketException (11001): No such host is known

仔细检查您的连接字符串是否有错字!!! Copy/paste 信息!

我不确定 OP 的连接字符串,根据文档,它的格式如下:

Host=dbServerName.random.ap-southeast-2.rds.amazonaws.com;Port=5432;Database=postgres;Username=admin;Password=NotRealPassword

REF: https://www.npgsql.org/doc/connection-string-parameters.html