При запуске Docker: не удается подключиться к браузеру SQL Server. Убедитесь, что браузер SQL Server запущен

#sql-server #docker #asp.net-core #networking #deployment

#sql-сервер #docker #asp.net-core #сеть #развертывание

Вопрос:

Я пытаюсь развернуть свой REST API.Однако приложение NET Core с Docker в первый раз, после создания моего образа docker, когда я пытаюсь запустить:

docker run -p 8080:80 mydockerid/dockerapi

Я получаю большой стек вызовов, среди которых есть ошибка:

 fail: Microsoft.EntityFrameworkCore.Database.Connection[20004]
      An error occurred using the connection to database 'CommanderDB' on server 'HELLOSQLEXPRESS'.
fail: Microsoft.EntityFrameworkCore.Query[10100]
      An exception occurred while iterating over the results of a query for context type 'Commander.Data.CommanderContext'.
      System.Exception: Cannot connect to SQL Server Browser. Ensure SQL Server Browser has been started.
       ---> System.Net.Internals.SocketExceptionFactory ExtendedSocketException (00000005, 0xFFFDFFFF): Name or service not known
         at System.Net.Dns.InternalGetHostByName(String hostName)
         at System.Net.Dns.GetHostAddresses(String hostNameOrAddress)
         at System.Net.Sockets.UdpClient.BeginSend(Byte[] datagram, Int32 bytes, String hostname, Int32 port, AsyncCallback requestCallback, Object state)
         at System.Net.Sockets.UdpClient.<>c.<SendAsync>b__56_0(Tuple`2 targetPackedArguments, Int32 targetBytes, Int32 targetPort, AsyncCallback callback, Object 
state)
  

После некоторых исследований я думаю, что проблема может заключаться в «Имени сервера» моего SQL Server Express. Когда я вхожу в SQL Server Management Studio, я использую ‘HELLO SQLEXPRESS’ в качестве имени сервера:

введите описание изображения здесь

Вот моя строка подключения в appsettings.json:

"CommanderConnection": "Server=HELLO\SQLEXPRESS;Initial Catalog=CommanderAPI;User ID=myid;Password=mypassword;"

Должно ли имя моего сервера быть каким-то другим? Возможно, есть способ изменить имя сервера на фактический IP-адрес?

Заранее спасибо.

Комментарии:

1. Служба браузера SQL прослушивает udp / 1434, что означает дополнительные проблемы с брандмауэрами и сопоставлением портов. Если вы знаете tcp-порт, который прослушивает ваш экземпляр SQL Server, тогда просто полностью избегайте службы SQL Browser и подключайтесь к tcp:server_ip,server_port , например: tcp:127.0.0.1,1433 .

2. @AlwaysLearning Спасибо за ответ. Вы имеете в виду 127.0.0.1,1433 в качестве имени моего сервера для SQL Server? Я только что попробовал это, но я не могу подключиться к своей базе данных с этим именем сервера. Я проверил конфигурацию, чтобы узнать, какой у меня порт сервера; поле было пустым, поэтому я сам ввел туда 1433 и включил соединение TCP / IP, однако это не решило проблему.

3. При изменении конфигурации протокола вам необходимо перезапустить службу SQL Server, чтобы изменения вступили в силу (или, в этом случае, перезапустить контейнер docker).

Ответ №1:

По умолчанию SQLEXPRESS не принимает удаленные подключения. Следуйте этому руководству для настройки соединений TCP / IP.

http://support.webecs.com/kb/a868/how-do-i-configure-sql-server-express-to-allow-remote-tcp-ip-connections-on-port-1433.aspx

Затем попробуйте подключиться к вашей базе данных, используя имя хоста и порт. Сначала попробуйте локально, а затем вы можете настроить свое приложение таким же образом.

Для эксперимента вы также можете запустить SQLEXPRESS как контейнер docker. Проверьте это руководство —https://kimsereyblog.blogspot.com/2018/10/docker-compose-asp-net-core-application.html

Комментарии:

1. Я попробовал первое, что вы предложили, однако мне не удалось подключиться к моей базе данных. Когда вы говорите подключиться к моей базе данных, используя имя хоста и порт, каким будет имя хоста? Это 127.0.0.1? Я подумываю о том, чтобы просто сделать мою базу данных sql контейнером, а затем соединить их.

2. 127.0.0.1 определенно не будет работать в качестве имени хоста, поскольку оно будет распознано как внутренний адрес контейнера. Можете ли вы вызвать свой хост-компьютер с каким-либо распознанным DNS-именем? Также вы можете попробовать узнать IP-адрес вашего хостинга (проверьте с помощью команды ipconfig) и использовать его для подключения. Для создания вашей базы данных SQL в качестве контейнера используйте вторую ссылку, которую я отправил. Используйте команду docker-compose для настройки обоих развертываний.