Невозможно подключиться к SQL Server из контейнера Docker

2

У нас есть приложение 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 Server не докеризован.

ОБНОВЛЕНИЕ 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
  • 0
    это то, что полный файл создания или более службы? SQL также докернизирован?
  • 0
    Да, это полный файл композиции. Сервер SQL не докеризован.
Показать ещё 3 комментария
Теги:
sql-server
docker
asp.net-core
docker-compose

1 ответ

1
Лучший ответ

В обычной ситуации это можно исправить, добавив имя хоста 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 в файл composer не будет работать, я надеюсь, что они скоро решат проблему.

Таким образом, чтобы соединение работало, замените имя хоста 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
  • 0
    Но имя сервера WIN-MSSQL1, верно? WIN-MSSQL1 \\ MSSQLSERVER2017 - это псевдоним. Тогда не должен ли дополнительный хост быть похож на следующую запись? extra_hosts: - "WIN_MSSQL1: 192.168.0.1"
  • 0
    Если вы можете получить оба имени хоста да, это работает.
Показать ещё 16 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню