Попытка обновить базу данных posgres в Docker, в результате чего машина отказывается от соединения - PullRequest
0 голосов
/ 28 мая 2019

При первом обновлении базы данных я получаю сообщение об ошибке

System.Net.Sockets.SocketException (10061): Соединение не может быть установлено, поскольку целевой компьютер активно отказал ему. в Npgsql.NpgsqlConnector.Connect (тайм-аут NpgsqlTimeout) в Npgsql.NpgsqlConnector.RawOpen (таймаут NpgsqlTimeout, логический асинхронный, CancellationToken cancellationToken) в Npgsql.NpgsqlConnector.Open (тайм-аут NpgsqlTimeout, логический асинхронный, CancellationToken cancellationToken) в Npgsql.NpgsqlConnection. <> c__DisplayClass32_0. d.MoveNext () --- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение --- в Npgsql.NpgsqlConnection.Open () в Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists () в Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists () в Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate (String targetMigration) в Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase (String targetMigration, String contextType) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute (Действие действия) Невозможно установить соединение, поскольку целевая машина активно от него отказалась.

Я использую Docker Toolbox для младшего компьютера. И я запустил контейнер postgres с командой:

docker run --name pg -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres;

Для подключения EF Core к pgsql я использовал пакет Nget Npgsql и 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);
    }
}

После чего я добавил dbContext в классе запуска

public void ConfigureServices(IServiceCollection services, IConfiguration config)
{
    services.AddDbContext<Models.MyDbContext>();

Кто-нибудь может мне помочь или предложить то, что я мог пропустить?

1 Ответ

0 голосов
/ 29 мая 2019

Для вашего сценария Server=127.0.0.1 будет работать при запуске вашего основного проекта .net с хоста.

Я предполагаю, что вы запускаете свой основной проект .net из докера, если это так, вам нужно выполнить шаги belwo, которые соединяют два контейнера.

  1. Измените строку подключения с именем контейнера postgres pg подобно

    "Server=pg;Port=5432;Database=postgres;Username=postgres;Password=password"
    
  2. Укажите --link=pg при запуске ядра .net, например

    docker run -it -p 8585:80 --link=pg dockerpostgres
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...