Серверная часть .Net Core 3.1 MSSQL в настройке Docker: Docker-compose вызывает сбой соединения

#c# #.net #sql-server #docker #connection

#c# #.net #sql-сервер #docker #подключение

Вопрос:

docker-compose.yml

 version: "3.9"
services:
    web:
        build: .
        ports:
            - "8000:80"
        container_name: web_application
        depends_on:
            - medicalmgr
    
    medicalmgr:
        image: "mcr.microsoft.com/mssql/server:2019-latest"
        environment:
            SA_PASSWORD: Pw@mm2021
            ACCEPT_EULA: Y
        ports:
            - "1433:1433"
        container_name: mmm_mmsql_2019
 

dockerfile

 FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app
COPY . .
RUN dotnet restore amp;amp; 
    dotnet publish -c Release -o out
    
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "MedicalManager.dll"]
 

Startup.cs ‘s

 public void CofigureServices(..){
      ....
       var server = Configuration["DBServer"] ?? "medicalmgr";
       var port = Configuration["DBPort"] ?? "1433";
       var user = Configuration["DBUser"] ?? "SA";
       var password = Configuration["DBPassword"] ?? "Pw@mm2021";
       var database = Configuration["Database"] ?? "MedicalManager";


       //var connectionStr = $"Server={server},{port};Initial Catalog={database};User ID= 
       //{user};Password={password}";
       var connectionStr = 
       @"Server=medicalmgr;Database=MedicalManager;User=sa;Password=Pw@mm2021;";
       services.AddDbContext<MedicalManagerDBContext>(
                options => options.UseSqlServer(connectionStr)
       );}
 

Ошибка:
Исключение при запуске приложения: Microsoft.Data.SqlClient.SQLException (0x80131904): при установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений. (поставщик: поставщик TCP, ошибка: 40 — Не удалось открыть соединение с SQL Server)

Комментарии:

1.Ссылка: сеть в Compose По умолчанию Compose настраивает единую сеть для вашего приложения. Каждый контейнер для службы подключается к сети по умолчанию и доступен как для других контейнеров в этой сети, так и для обнаружения ими по имени хоста, идентичному имени контейнера. Вы пробовали использовать Server=mmm_mmsql_2019; в своей строке подключения?

2. Имя контейнера не будет работать для имени сервера, даже если они по дизайну все контейнеры, находящиеся на одном хост-компьютере, используют одну и ту же сеть по умолчанию, если не указано иное. В любом случае, вот исходный код, github.com/biteus/mmm_development/pull/new/docker_mssql_con публичный доступ. Если бы вы могли посмотреть, можете ли вы подключиться. Кстати, если . Net app нет в docker, но есть DB, затем он подключается. Мне нужно, чтобы оба были в настройке Docker. Ваша помощь будет высоко оценена. Спасибо Дэну Гусману

3. Дэн Гусман. Я решил проблему с наличием asp.net приложение core 3.2 с базой данных mssql работает в контейнерном решении. Однако, только когда в настройке контейнера, после регистрации пользователя, логин не работает. Любое предложение. Некоторая проблема с перенаправлением.

Ответ №1:

Попробуйте это:

 var connectionStr = 
@"Data Source=localhost,1433;Initial Catalog=MedicalManager;User Id=sa;Password=Pw@mm2021";