#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.
Затем попробуйте подключиться к вашей базе данных, используя имя хоста и порт. Сначала попробуйте локально, а затем вы можете настроить свое приложение таким же образом.
Для эксперимента вы также можете запустить 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 для настройки обоих развертываний.