我正在尝试让我的应用程序与 Docker Compose 配合使用,但每次运行
docker-compose up -d
时,我的 API 都会在启动时崩溃(我正在尝试使用 EF Core 迁移我的数据库,以防我不在生产环境中)。
我收到此错误:
2024-05-15 17:24:18 Unhandled exception. Npgsql.NpgsqlException (0x80004005): Failed to connect to 192.168.208.2:5432
2024-05-15 17:24:18 ---> System.Net.Sockets.SocketException (111): Connection refused
2024-05-15 17:24:18 at Npgsql.Internal.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
2024-05-15 17:24:18 at Npgsql.Internal.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
2024-05-15 17:24:18 at Npgsql.Internal.NpgsqlConnector.RawOpen(SslMode sslMode, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken, Boolean isFirstAttempt)
2024-05-15 17:24:18 at Npgsql.Internal.NpgsqlConnector.<Open>g__OpenCore|213_1(NpgsqlConnector conn, SslMode sslMode, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken, Boolean isFirstAttempt)
2024-05-15 17:24:18 at Npgsql.Internal.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
2024-05-15 17:24:18 at Npgsql.UnpooledDataSource.Get(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
2024-05-15 17:24:18 at Npgsql.NpgsqlConnection.<Open>g__OpenAsync|42_0(Boolean async, CancellationToken cancellationToken)
2024-05-15 17:24:18 at Npgsql.NpgsqlConnection.Open()
2024-05-15 17:24:18 at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
2024-05-15 17:24:18 at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal(Boolean errorsExpected)
2024-05-15 17:24:18 at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
2024-05-15 17:24:18 at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists(Boolean async, CancellationToken cancellationToken)
2024-05-15 17:24:18 at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists(Boolean async, CancellationToken cancellationToken)
2024-05-15 17:24:18 at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists()
2024-05-15 17:24:18 at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
2024-05-15 17:24:18 at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.GetAppliedMigrations()
2024-05-15 17:24:18 at Npgsql.EntityFrameworkCore.PostgreSQL.Migrations.Internal.NpgsqlMigrator.Migrate(String targetMigration)
2024-05-15 17:24:18 at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.Migrate(DatabaseFacade databaseFacade)
2024-05-15 17:24:18 at Program.<Main>$(String[] args) in /src/QuizyZunaAPI.Api/Program.cs:line 31
这是我的 Docker Compose:
version: '3.4'
services:
quizyzuna-db:
container_name: Database
image: postgres:alpine
restart: always
environment:
- POSTGRES_DB=quizyzunadb
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
- ./.containers/database:/var/lib/postgressql/data
ports:
- 5432:5432
quizyzuna-api:
container_name: API
image: ${DOCKER_REGISTRY-}quizyzunaapi
build:
context: src/
depends_on:
- quizyzuna-db
以及 docker compose 覆盖:
version: '3.4'
services:
quizyzuna-api:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_HTTP_PORTS=8080
- ASPNETCORE_HTTPS_PORTS=8081
- ConnectionStrings__Database=Host=Database;Username=postgres;Password=postgres;Database=quizyzunadb;
ports:
- "8080"
- "8081"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/home/app/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/home/app/.aspnet/https:ro
在我的作文中,我尝试删除我的连接字符串,以给它 docker 构建的字符串,看起来?就像它有效一样。
我可以通过我的本地主机与数据库上的 DBeaver 连接。
我试图寻找常见错误,但大多数都是开发人员在环境中编写 localhost 作为主机。
我的连接字符串似乎没问题,并且连接字符串似乎已正确替换,但我不知道要搜索什么。你有线索吗?
您的 quizyzuna-api 是否在其连接字符串中使用了正确的主机。 尝试将连接字符串中的主机设置为 quizyzuna-db
此外,您的日志表明该 api 正在尝试连接到 192.168.208.2。您可以使用 docker inform 查看 postgres 容器的 IP 地址来验证是否为 192.168.208.2