J'ai un menu fixe pour Windows installé sur ma machine. Une application console ciblant .net core 1.0.0 tente d'accéder à une base de données SQL Server s'exécutant sur une machine virtuelle différente. Je peux envoyer un ping à la VM exécutant SQL Server à partir de mon ordinateur.
Lorsque j'essaie d'exécuter l'application console à l'aide de dotnet run
à partir de la commande Invite sur ma machine, tout fonctionne correctement. Mais lorsque la même application est exécutée à l'intérieur d'un conteneur Docker, un message s'affiche.
Une erreur liée au réseau ou spécifique à une instance s'est produite pendant que établir une connexion à SQL Server. Le serveur n'a pas été trouvé ou n'était pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions à distance. (fournisseur: TCP Fournisseur, erreur: 40 - Impossible d'ouvrir une connexion à SQL Server)
J'ai essayé d'utiliser
docker run --add-Host sqldemo:<VM running sql server ip here>
mais cela ne faisait aucune différence.
Faites un clic droit sur votre base de données, sélectionnez le bouton radio "Propriétés/Sécurité/Authentification du serveur/Mode d’authentification SQL Server et Windows". Redémarrez le service MS SQL.
Exemple
"ConnectionStrings": {
"DefaultConnection": "Server=YourServerName;Database=YourDatabaseName;MultipleActiveResultSets=true;User Id=UserNameYouJustAdded;Password=PassordYouJustCreated"
},
Assurez-vous de supprimer Trusted_Connection=True
.
Mon exemple de fichier Docker
FROM Microsoft/dotnet:nanoserver
ARG source=.
WORKDIR /app
EXPOSE 5000
EXPOSE 1433
ENV ASPNETCORE_URLS http://+:5000
COPY $source .
Exécution du même emplacement que le fichier Docker dans un PowerShell élevé
dotnet publish
docker build bin\Debug\netcoreapp1.0\publish -t aspidserver
docker run -it aspidserver cmd
Je voulais exécuter le conteneur et voir la sortie telle qu'elle s'exécutait dans PowerShell.
Une fois le conteneur installé et en cours d'exécution dans le conteneur à l'invite de commande, j'ai lancé mon application.
dotnet nameOfApplication.dll
Si tout se passe comme prévu, il faut être opérationnel.
Vous pouvez exécuter un conteneur de menu fixe avec les paramètres réseau définis sur Host
. Un tel conteneur partagera la pile réseau avec l'hôte du menu fixe et du point de vue du conteneur, localhost (ou 127.0.0.1) désignera le système hôte.
docker run --net=Host ...
Ensuite, vous devez obtenir la base de données SQL Server de l'intérieur du conteneur de menu fixe, comme vous le faites de votre hôte.
comme dans cette réponse
Connexion de chaîne d'instance SQL Server dans Linux Docker
Selon Saurabh Singh de Microsoft:
La prise en charge du nom d'instance est disponible dans la version 1.1 de .Net Core. Dans v1.0 de .Net Core, les noms d’instance ne sont pas pris en charge sur les systèmes d’exploitation autres que Les fenêtres.
Je ne pense donc pas que vous puissiez vous connecter à partir de .Net Core 1.0 s'exécutant sous Linux à un serveur SQL Server à l'aide du nom d'instance.
Vos choix semblent être:
don't use instance name wait for .Net Core 1.1 (planned for "Fall 2016") use pre-release version of .Net Core 1.1