Как подключиться к SQL Server, работающему на хосте, из приложения .NET в окне докера Windows - PullRequest
0 голосов
/ 29 января 2019

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

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

ОК, я идиот.Я предположил, что, поскольку я мог получить доступ к своему SQL-серверу с другого компьютера в сети, этого должно быть достаточно.Но мой корпоративный брандмауэр отключен, и контейнер использует частную сеть (с включенным брандмауэром).Отключение брандмауэра для частных сетей позволило установить успешное соединение.

Вот так!

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

Вам необходимо иметь сетевое соединение между хостом и док-контейнером.

Также вы пытаетесь выставить порт 1433 из вашего контейнера, на котором не работает служба SQL Server.Это не сработает.

Вам также необходимо проверить, настроен ли ваш SQL Server для разрешения соединений TCP / IP из диспетчера конфигурации SQL Server.

Посмотрите, поможет ли этот пост решить проблемуВаша проблема: Как получить доступ к порту хоста из Docker-контейнера

и эта статья https://nickjanetakis.com/blog/docker-tip-35-connect-to-a-database-running-on-your-docker-host

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...