У меня есть докер-контейнер Windows и простое тестовое приложение, которое пытается подключиться к SQL Server, работающему на хосте, но не может подключиться.
Я могу пропинговать хост сКонтейнер использует "ping -4 hostmachinename", но метод SqlConnection Open завершается неудачей.
Для проверки я запускаю следующие команды:
docker build --tag = heydocker.Docker Run Heydocker: последний
# Dockerfile:
FROM microsoft/dotnet-framework
WORKDIR /app
COPY . /app
EXPOSE 1433
CMD ["program.exe"]
Это код моего приложения:
// program.cs:
using System;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
namespace Test
{
public static class program
{
const string CONNECT = "Data Source=docker.for.win.localhost;Database=MG108RC3_All;User ID=sa;Pwd=password;Network Library=dbmssocn";
public static void Main()
{
Console.WriteLine( "Hello Docker" );
try
{
using ( var con = new SqlConnection( CONNECT ) )
{
con.Open();
Console.WriteLine( "Open SUCCESS" );
}
}
catch ( Exception ex )
{
Console.WriteLine( $"ERROR: {ex.Message}" );
}
}
}
}
Я попытался опустить EXPOSE в Dockerfile, а также использовать EXPOSE 1433: 1433.
Я также пытался использовать фактическое имя компьютера в строке подключения, а также host.docker.internal.
При использовании docker.for.win.localhost я получаю исключение: ОШИБКА: AПри установке соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром.Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.(поставщик: поставщик TCP, ошибка: 0 - такой хост не известен.)
При использовании имени компьютера я получаю: ОШИБКА: во время установки соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром.,Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.(провайдер: провайдер TCP, ошибка: 0 - истекло время ожидания операции ожидания.)
Я пробовал различные варианты для --net, но, поскольку я могу пропинговать свой хост с сетевыми настройками по умолчанию, я неуверен, что это проблема.