services:
my-api:
container_name: my-api
environment:
- ASPNETCORE_ENVIRONMENT=Docker
depends_on:
- sqlserver
ports:
- "44353:44353"
sqlserver:
container_name: sqlserver
image: mcr.microsoft.com/mssql/server:2022-latest
environment:
- MSSQL_SA_PASSWORD=p@ssw0rd
- ACCEPT_EULA=Y
ports:
- "1433:1433"
Вот мой Dockerfile для MyApi:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
COPY bin/Release/net8.0/publish/ app/
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
FROM base AS final
WORKDIR /app
COPY --from=build /src .
ENTRYPOINT ["dotnet", "MyApi.dll"]
Моя проблема в том, что API не может запуститься из-за строк подключения:
Server=sqlserver,1433;Database=MyDatabase;User ID=sa;pwd=p@ssw0rd;TrustServerCertificate=True
Но я не могу понять, почему:
- Когда я пытаюсь подключиться к базе данных докера с помощью sqlcmd или с SQL Server Management Studio с моего хост-компьютера все работает нормально.
- Если я создаю докер Ubuntu внутри стека для проверки связи с моей машиной (sqlserver) по имени докера, это тоже работает
- Если я запускаю sqlcmd внутри докера Ubuntu с помощью этой командной строки /opt/mssql-tools18/bin/sqlcmd - S sqlserver,1433 -U sa -P p@ssw0rd -C это работает
- Если я запускаю MyApi со строками подключения докера вне моего докера (прямо из Visual Studio), работает
Я также клонировал этот репозиторий docker-compose-demo, чтобы проверить, работает ли он, и это так.
Это что-то специфическое для ABP.io? Я пока понятия не имею
РЕДАКТИРОВАТЬ: кроме того, я не уверен, связано ли это, но в журналах докера я вижу это:
2024-11-29 14:24:02 [19:24:02 ERR] An error occurred using the connection to database 'MyDatabase' on server 'sqlserver,1433'.
...
2024-11-29 14:24:02 [19:24:02 ERR] Object reference not set to an instance of an object.
2024-11-29 14:24:02 System.NullReferenceException: Object reference not set to an instance of an object.
2024-11-29 14:24:02 at Microsoft.Data.Common.ADP.LocalMachineRegistryValue(String subkey, String queryvalue)
2024-11-29 14:24:02 at Microsoft.Data.SqlClient.TdsParserStaticMethods.AliasRegistryLookup(String& host, String& protocol)
2024-11-29 14:24:02 at Microsoft.Data.SqlClient.SqlInternalConnectionTds.ResolveExtendedServerName(ServerInfo serverInfo, Boolean aliasLookup, SqlConnectionString options)
Подробнее здесь: https://stackoverflow.com/questions/792 ... nt-connect
Мобильная версия