I have a docker compose file, I have a postgres instance being brough up, and a web api project also, however I am getting the following error:
api_1 | Application startup exception
api_1 | Npgsql.NpgsqlException (0x80004005): Exception while connecting
api_1 | ---> System.TimeoutException: Timeout during connection attempt
api_1 | at Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
api_1 | at Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
api_1 | at Npgsql.NpgsqlConnector.RawOpen(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
api_1 | at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
api_1 | at Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext()
api_1 | --- End of stack trace from previous location where exception was thrown ---
api_1 | at Npgsql.NpgsqlConnection.Open()
api_1 | at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists()
api_1 | at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
api_1 | at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
api_1 | at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.Migrate(DatabaseFacade databaseFacade)
api_1 | at my.Claims.Engine.Api.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env, myDbContext ctx) in /src/my.Claims.Engine.Api/Startup.cs:line 56
api_1 | at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
api_1 | at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
api_1 | at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
api_1 | at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder)
api_1 | at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.<UseStartup>b__2(IApplicationBuilder app)
api_1 | at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
api_1 | at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
api_1 | at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
api_1 | Unhandled exception. Npgsql.NpgsqlException (0x80004005): Exception while connecting
api_1 | ---> System.TimeoutException: Timeout during connection attempt
api_1 | at Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
api_1 | at Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
api_1 | at Npgsql.NpgsqlConnector.RawOpen(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
api_1 | at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
api_1 | at Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext()
api_1 | --- End of stack trace from previous location where exception was thrown ---
api_1 | at Npgsql.NpgsqlConnection.Open()
api_1 | at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists()
api_1 | at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
api_1 | at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
api_1 | at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.Migrate(DatabaseFacade databaseFacade)
api_1 | at my.Claims.Engine.Api.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env, myDbContext ctx) in /src/my.Claims.Engine.Api/Startup.cs:line 56
api_1 | at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
api_1 | at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
api_1 | at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
api_1 | at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder)
api_1 | at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.<UseStartup>b__2(IApplicationBuilder app)
api_1 | at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
api_1 | at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
api_1 | at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
api_1 | at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
api_1 | at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
api_1 | at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
api_1 | at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
api_1 | at my.Claims.Engine.Api.Program.Main(String[] args) in /src/my.Claims.Engine.Api/Program.cs:line 17
my-claims_api_1 exited with code 139
Here is my docker-compose:
services:
db:
image: postgres
restart: always
ports:
- '5432:5432'
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: password
eventbus:
image: 'rabbitmq'
ports:
- '5672:5672'
- '15672:15672'
portal:
image: ${DOCKER_REGISTRY-}portal
build:
context: ./portal
dockerfile: Docker/Dockerfile
ports:
- "3000:80"
api:
image: ${DOCKER_REGISTRY-}my_claims_engine_api
build:
context: ./my.Claims.Engine
dockerfile: my.Claims.Engine.Api/Dockerfile
ports:
- "4000:80"
Here is my connection string:
"myDbContext": "Server=localhost;Port=5432;Database=mydatabase;User Id=root;Password=password;"
If I run the postgres as it's own image, and connect via it's local address I am able to connect, my migrations run, no problems whatsoever.
The only time I get the error is via the docker-compose.
Additionally, I am unable to connect to the rabbitmq instance via localhost:15672, any suggestions on that would be great too...
Any ideas where the problem is?
you can't use the localhost while communicating with containers. because in the container has it's own loopback address. therefore you need to use a service name, container name, or host IP address.
if IP address = 10.10.10.1
you can connect to your Postgres using
"myDbContext":"Server=10.10.10.1;Port=5432;Database=mydatabase;UserId=root;Password=password;"
in your container, you can use Server=db
User contributions licensed under CC BY-SA 3.0