Докер в Windows Подключение к серверу sql из приложения dotnetcore

Я построил простой api, используя ядро ​​asp.net, которое возвращает некоторые данные из базы данных sql-сервера.

Он отлично работает в VS и из командной строки, но когда я создаю и запускаю приложение в качестве контейнера докеров на моем компьютере с Windows 10, когда я вызываю api, я продолжаю получать эту ошибку.

System.Data.SqlClient.SqlException: время ожидания подключения истекло. период ожидания, прошедший во время фазы после входа. Связь может быть тайм-аут, ожидая, когда сервер завершит вход в систему обрабатывать и реагировать; Или это может быть тайм-аут при попытке создать несколько активных соединений. Продолжительность попытка подключения к этому серверу была - [Pre-Login] Инициализация = 425; Рукопожатие = 265; [Вход] инициализация = 5; Аутентификация = 9; [Post-Login] complete = 14034; --- > System.ComponentModel.Win32Exception: Неизвестная ошибка 258

Я не совсем уверен, что это говорит мне, как будто он не может найти сервер sql-сервера. Мне нужно каким-то образом открыть порт 1433 в конфигурации докера или когда я запустил контейнер?

Ответ 1

Как пояснил Цзэн в своем комментарии, ваши контейнеры находятся в их собственной сети, а не в вашей сети хоста. Вы действительно хотите разоблачить этот порт (или сопоставить другой доступный порт на своем хосте), который вы можете легко сделать с помощью Docker Compose. В приведенном ниже примере (который вы использовали бы в файле docker-compose.yml), sql - это имя вашего контейнера базы данных, 1337 - это локальный порт, а 1433 - контейнерный порт.

sql:
 ports:
 - "1337:1433"