Строка подключения для sqlserver в контейнере Docker
Я использую Visual Studio 2017 для mac с ядром dotnet Core и EF Core. После настройки изображения mssql в контейнере Docker я пытался добавить строку подключения, но сбросил ошибку подключения. Я пытался использовать различные параметры, такие как ip-адрес, имя контейнера, имя хоста и т.д. В качестве имени сервера, но ни один из них не работал.
"Default": "Server=172.17.0.2; Database=ERPDb; User=sa; Password =******;"
с именем контейнера
"Default": "Server=ecstatic_hermann; Database=ERPDb; User=sa; Password=******;"
с именем хоста:
"Default": "Server=f45840a59623; Database=ERPDb; User=sa; Password=******;"
При подключении через localhost в терминале его успешное соединение
$ mssql -s localhost -p Technocrat123
Connecting to localhost...done
sql-cli version 0.6.2
Enter ".help" for usage hints.
Но при запуске приложения соединение терпит неудачу.
Оцените любую помощь. Спасибо заранее.
При использовании localhost ошибка
Login failed for user ''. Reason: An attempt to login using SQL authentication failed. Server is configured for Integrated authentication only.
Ответы
Ответ 1
Я только написал сообщение в блоге об этом. Взгляните на richminchuk.io. Иначе:
sudo docker pull microsoft/mssql-server-linux:2017-latest
docker run \
-d microsoft/mssql-server-linux:2017-latest \
-e 'ACCEPT_EULA=Y' \
-e 'MSSQL_SA_PASSWORD=YourSTRONG!Passw0rd' \
-p 1401:1433 \
--name sql1
затем,
private static string _connStr = @"
Server=127.0.0.1,1401;
Database=Master;
User Id=SA;
Password=YourSTRONG!Passw0rd
";
Ответ 2
Скорее всего, имя вашего сервера - localhost и порт 1401 (который по умолчанию используется для настройки контейнера Docker). Поэтому вам понадобится следующая строка подключения:
"Default": "Server=localhost,1401; Database=ERPDb; User=sa; Password =******;"
Ответ 3
У меня была эта проблема сегодня, и я решил ее, используя отдельную сеть (вместо использования сети по умолчанию "мост").
-
docker network create test_network
-
docker container run -p 1433:1433 -d --name mssql -v mssql_data: /var/opt/mssql -e SA_PASSWORD=********** -e ACCEPT_EULA=Y --network=test_network microsoft/mssql-server-linux
-
docker container run -p 5000:80 --rm -e ASPNETCORE_ENVIRONMENT=Development --name aspnetcore --network=test_network aspnetcore-image
Также у меня есть такая строка подключения:
Server=mssql;Database=master;User=sa;Password=**********;
Что касается предыдущих ответов относительно строки подключения с IP-адресом, это не очень хороший подход, поскольку этот адрес можно динамически изменять, лучше использовать имена контейнеров в качестве имен хостов.