docker - 尝试在 docker 中更新 posgres 数据库导致机器拒绝连接
问题描述
在进行第一次数据库更新时出现错误
System.Net.Sockets.SocketException (10061):无法建立连接,因为目标机器主动拒绝了它。在 Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout) 在 Npgsql.NpgsqlConnector.RawOpen(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken) 在 Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancelToken) 在 Npgsql.NpgsqlConnection.<>c__DisplayClass32_0 .<g__OpenLong|0>d.MoveNext() --- 从先前引发异常的位置结束堆栈跟踪 --- 在 Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists 的 Npgsql.NpgsqlConnection.Open() () 在 Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists() 在 Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator。
我正在为低端电脑使用 Docker Toolbox。我用命令运行了 postgres 容器:
docker run --name pg -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres;
为了将 EF Core 连接到 pgsql,我使用了 Npgsql nuget 包和 connectionString
"Server=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
接下来,我在 MyDbContext 文件中创建
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { }
}
public class MyDbContextFactory : IDesignTimeDbContextFactory<MyDbContext>
{
public MyDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();
optionsBuilder.UseNpgsql("Server=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password");
return new MyDbContext(optionsBuilder.Options);
}
}
之后我在 Startup 类中添加了 dbContext
public void ConfigureServices(IServiceCollection services, IConfiguration config)
{
services.AddDbContext<Models.MyDbContext>();
谁能帮助我,或者建议我错过了什么?
解决方案
对于您的方案,Server=127.0.0.1
当您从主机启动 .net 核心项目时将起作用。
我假设您从 docker 启动您的 .net 核心项目,如果是这样,您需要按照以下步骤连接两个容器。
使用 postgres 容器名称更改您的连接字符串
pg
,例如"Server=pg;Port=5432;Database=postgres;Username=postgres;Password=password"
指定
--link=pg
运行 .net 核心的时间,例如docker run -it -p 8585:80 --link=pg dockerpostgres
推荐阅读
- mysql - Docker compose 文件不适用于 Node 应用程序中的 Sequlize 和 Mysql
- maven - Wildfly BOM 不包括 Weld
- html - 用 css 摆脱导航栏周围的空白区域
- c# - dotnet 一次发布多个 csproj
- spring - @RolesAllowed 注释总是用 Keycloak 抛出 403 错误
- c# - 在 ASP.NET Core Razor 页面的发布请求中角色为空
- python - 基于多个文档中的数组进行过滤
- angular - 在 FormArray 子上调用 disable() 会重置脏状态
- python-3.x - socket.gaierror: [Errno -3] 名称解析暂时失败
- storage - 在 STM32H743ZI 上将 ADC 流存储在 µSD 卡上而不会丢失