Строка подключения для 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

У меня была эта проблема сегодня, и я решил ее, используя отдельную сеть (вместо использования сети по умолчанию "мост").

  1. docker network create test_network

  2. 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

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