web-dev-qa-db-fra.com

chaîne de connexion pour sqlserver dans le conteneur Docker

J'utilise Visual Studio 2017 pour mac avec Dotnet Core et EF Core. Après avoir configuré l’image mssql dans le conteneur Docker, j’essayais d’ajouter la chaîne de connexion, mais en générant une erreur de connexion. J'ai essayé avec différentes options telles que l'adresse IP, le nom du conteneur, le nom d'hôte, etc. comme nom de serveur, mais aucun d'entre eux n'a fonctionné. 

 "Default": "Server=172.17.0.2; Database=ERPDb; User=sa; Password =******;"

avec nom du conteneur 

 "Default": "Server=ecstatic_hermann; Database=ERPDb; User=sa; Password=******;"

avec nom d'hôte:

 "Default": "Server=f45840a59623; Database=ERPDb; User=sa; Password=******;"

Lors de la connexion via localhost dans Terminal, sa connexion a réussi 

$ mssql -s localhost -p Technocrat123
Connecting to localhost...done

sql-cli version 0.6.2
Enter ".help" for usage hints.

Mais lors de l'exécution de l'application, la connexion échoue.

Appréciez toute aide. Merci d'avance.

Si vous utilisez localhost, alors erreur est 

Login failed for user ''. Reason: An attempt to login using SQL authentication failed. Server is configured for Integrated authentication only.
11
user2695433

Je viens d'écrire un article sur ce blog. Jetez un coup d’œil à richminchuk.io . Autrement:

Sudo docker pull Microsoft/mssql-server-linux:2017-latest
docker run \
   -e 'ACCEPT_EULA=Y' \
   -e 'MSSQL_SA_PASSWORD=YourSTRONG!Passw0rd' \
   -p 1401:1433 \
   -n sql1 \
   -d Microsoft/mssql-server-linux:2017-latest

puis,

private static string _connStr = @"
   Server=127.0.0.1,1401;
   Database=Master;
   User Id=SA;
   Password=YourSTRONG!Passw0rd
";
11
rjminchuk

Le nom de votre serveur est très probablement localhost et le port 1401 (qui est la valeur par défaut pour la configuration du conteneur Docker). Par conséquent, vous devrez utiliser la chaîne de connexion suivante:

"Default": "Server=localhost,1401; Database=ERPDb; User=sa; Password =******;"
7
David Poindexter

J'ai eu ce problème aujourd'hui et je l'ai résolu en utilisant un réseau séparé (au lieu d'utiliser le réseau "pont" par défaut).

  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

J'ai aussi une telle chaîne de connexion:

Server=mssql;Database=master;User=sa;Password=**********;

À propos des réponses précédentes concernant la chaîne de connexion avec adresse IP, ce n’est pas une bonne approche, car cette adresse peut être modifiée de façon dynamique, il est préférable d’utiliser des noms de conteneur, en tant que noms d’hôte.

0
Yankov Viacheslav