.NET Core API не может подключиться к базе данных через docker-compose - PullRequest
0 голосов
/ 16 февраля 2019

Я занимаюсь разработкой основного веб-API .NET с базой данных MSSQL Server.Я попытался заключить это в контейнер Docker и использовать Docker Compose для ускорения этого сервиса.Но мой API не может подключиться к базе данных.

Произошла следующая ошибка:

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

Код в моем запуске:

services.AddDbContext<ProductServiceDbContext>(options =>
     options.UseSqlServer("server=sqlserver;port=1433;user id=sa;password=docker123!;database=ProductService;"));

Dockerfile:

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore dockerapi.csproj

COPY . ./
RUN dotnet publish dockerapi.csproj -c Release -o out

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime

WORKDIR /app

COPY --from=build /app/out .

ENTRYPOINT ["dotnet", "dockerapi.dll"]`

Docker-compose:

version: '3.4'

services:
   productservice:
     image: productservice/api
     container_name: productservice_api
     build:
       context: ./ProductService/ProductService
     depends_on:
       - sqlserver
     ports:
       - "5000:80"

   sqlserver:
     image: microsoft/mssql-server-linux:latest
     container_name: sqlserver
     ports:
       - "1433"
     environment:
       - ACCEPT_EULA=Y 
       - SA_PASSWORD=docker123!

Я пробовал несколько вещей:

  • Добавление ссылок в файл docker-compose (sqlserver в productservice)
  • Добавление сетей в файл docker-compose
  • Изменена строка подключения на "server = sqlserver; идентификатор пользователя = sa; пароль = docker123!; Database = ProductService;"или "сервер = sqlserver, 1433; идентификатор пользователя = sa; пароль = docker123!; база данных = ProductService;"

1 Ответ

0 голосов
/ 18 июня 2019
  1. Попробуйте другой порт, потому что это может вызвать конфликт с существующим.например, "1433: 1401";
  2. Отключите антивирус на некоторое время и посмотрите, работает ли он;
  3. Создайте каталог с именем "ProductService", как определено в вашем appSettings.json, прежде чем запускатьконтейнер;

Я не проверял это.Попробуйте на свой страх и риск.

...