На той же виртуальной машине (удаленной, Ubuntu) у меня есть
- SQL Server , работающий в Docker
- .NETБазовое приложение 2.2 (IdentityServer), запущенное в докере
- Экземпляр jwilder.nginx-proxy , служащий в качестве обратного прокси-сервера для каждого веб-приложения наустройство
- Множество других приложений .NET Core
Я могу подключиться ко всем своим веб-сайтам, используя IP-адрес компьютера и имя домена, что означает обратный прокси-серверработает, как и ожидалось, и докеры хорошо настроены
Я могу подключиться к SQL Server , используя SSMS с моей локальной машины, что означает, что SQL ServerДокер правильно перенаправляет TCP-соединение через порт 1433
. Веб-приложение IdentityServer .NET Core 2 может подключаться к SQL Server при запуске на моей локальной машине .
Приложение IdentityServer удаленного докераИон не может получить доступ к экземпляру SQL Server со следующей ошибкой (сокращено для ясности - удалена трассировка стека)
System.Data.SqlClient.SqlException (0x80131904)
:
Связанный с сетью или экземплярошибка при установлении соединения с SQL Server.Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.
(поставщик: TCP Provider, error: 40
- не удалось открыть соединение с SQL Server) на [...]
Я знаю, что сервер SQL работает и доступен из Интернетаи я знаю, что код приложения не виноват, потому что я протестировал оба.
Так что я понял, что это должен быть докер IdentityServer, который блокировал соединение.Поэтому я попытался:
- Используя команду
--expose 20
на панели настройки IdentityServer - Открытие, отображающее порт 20 внутри контейнера на некоторый порт за пределами
-p 45264:20
в дополнение к уже выставленномупорт 80 - Первоначально я работал над использованием порта 1433 с обеих сторон сопоставления, но так как он не работал, я попытался использовать другой порт снаружи (20).Ничего не изменилось
Вот строка соединения, используемая IdentityServer (конфиденциальные данные скрыты):
Data Source=***.***.***.***,20;Initial Catalog=Identity;Persist Security Info=True;User ID=**;Password=******************
Почему мой докер IdentityServer не может связаться с докером SQL Serverв то время как сам SQL Server вполне достижим?Как я могу заставить эту настройку работать?