.Net Core Docker Image не может получить доступ к базе данных при работе в Docker - PullRequest
1 голос
/ 15 марта 2019

У меня есть приложение ядра dotnet, которое пытается получить доступ к базе данных, когда я запускаю его в visual studio, оно работает нормально (возможно, из-за проверки подлинности моего домена), но когда я пытаюсь создать образ докера и запустить его с docker run -it --rm -p 8080:80 --name console console

Я получаю эту ошибку, но я не совсем понимаю, почему? Кто-нибудь знает, как я могу это исправить?

Строка подключения выглядит следующим образом: Data Source=DBTest; Initial Catalog=test;Integrated Security=True

он отлично работает локально на моей машине, когда я запускаю Visual Studio.

Ошибка:

System.Data.SqlClient.SqlException (0x80131904): во время установления соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не был найден или не был доступен sible. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений. (поставщик: сетевые интерфейсы SQL, ошибка: 0 - доступ запрещен.) ---> System.Com ponentModel.Win32Exception (5): доступ запрещен

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Ваш работающий контейнер докера не понимает строки подключения, такие как

localhost

localhost\MyInstance

Вам нужно что-то вроде этого:

Источник данных = host.docker.internal: 1433; DatabaseName =MyDatabase;

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

Вы должны рассматривать запущенные образы докера как ДРУГУЮ МАШИНУ,поэтому если у вас есть sql-сервер localhost \ MyInstance, вам также придется открывать удаленные tcp-подключения к нему.

Общее правило.

Контейнер, работающий на вашей машине...не похож на локальный код .. такие вещи, как db-сервер, local-sftp и т. д.

0 голосов
/ 15 марта 2019

Сообщение об ошибке уже дает вам хороший совет. Клиентское приложение, которое вы порождаете в контейнере с именем 'console', либо не находится в той же сети, что и экземпляр вашей базы данных, либо ваш сервер MSSQL отклоняет удаленные подключения.

См. Мэтт. комментарий G , как настроить MSSQL для приема подключений от удаленных клиентов.

Поскольку вы не указали сеть при выполнении docker run, контейнер неявно подключен к вашему хосту через сетевой интерфейс моста. Вы можете проверить IP-адрес работающего контейнера с помощью:

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name>
# more verbose:
# docker inspect <container_name>

Вам также следует дважды проверить строку подключения, чтобы фактически указать систему, в которой размещена ваша база данных. В вашем случае, вероятно, IP-адрес вашего физического компьютера / хоста докера.

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