Reputation: 210
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?
Upvotes: 2
Views: 5415
Reputation: 924
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
Upvotes: 1