Невозможно подключиться к SQL Server из контейнера Docker - PullRequest
0 голосов
/ 02 января 2019

У нас есть приложение ASP.NET Core 2.2, которое прекрасно работало со своей базой данных, размещенной на отдельном сервере.Все операции CRUD работали без нареканий.Мы докеризировали приложение, но начали получать следующее сообщение об ошибке:

При установлении соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром.Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.(поставщик: сетевые интерфейсы SQL, ошибка: 26 - ошибка при поиске указанного сервера / экземпляра)

Файл составления Docker выглядит следующим образом:

version: '3.4'

services:
  services.webapi:
    image: ${DOCKER_REGISTRY-}serviceswebapi
    build:
      context: .
      dockerfile: Services.WebApi\Dockerfile
      network: host

Что может быть не такв этой конфигурации мешает приложению взаимодействовать с экземпляром SQL Server?

ОБНОВЛЕНИЕ 1 : сервер SQL не подключен к док-станции.

ОБНОВЛЕНИЕ 2 : Приложение читает строку подключения SQL из файла appsettings.json.Это строка подключения после переименования имени сервера и учетных данных:

Server=WIN-MSSQL1\\MSSQLSERVER2017;Initial Catalog=ServiceDB;User ID=cruduser;Password=foo;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

1 Ответ

0 голосов
/ 02 января 2019

В обычной ситуации это можно исправить, добавив имя хоста sql в файл / etc / hosts контейнера через файл composer, например так:

version: '3.4'

services:
  services.webapi:
    image: ${DOCKER_REGISTRY-}serviceswebapi
    build:
      context: .
      dockerfile: Services.WebApi\Dockerfile
      network: host
    extra_hosts:
      - "WIN_MSSQL1:192.168.0.1"

К сожалению, из-за этой проблемы добавление extra_hosts в файл композитора не будет работать, я надеюсь, что они скоро решат проблему.

Таким образом, чтобы соединение работало, замените имя хоста IP-адресом SQL-сервера:

из этого:

Server=WIN-MSSQL1\\MSSQLSERVER2017;Initial Catalog=ServiceDB;User ID=cruduser;Password=foo;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

к этому:

Server=192.168.0.1\\MSSQLSERVER2017;Initial Catalog=ServiceDB;User ID=cruduser;Password=foo;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False
...