0
votes

Impossible d'atteindre SQL Server Hosted Docker à partir de Web App Docker sur le même hôte

sur la même machine virtuelle (télécommande, Ubuntu), j'ai

  • un serveur SQL strong> exécuté dans un docker li>
  • un .NET CORE 2.2 STRUT> (ITIALYSERVER) Application fonctionnant dans un docker li>
  • une instance de JWilder.nginx-proxy strong> servant comme une proxy inverse pour chaque application Web sur la machine li>
  • Une multitude d'autres applications .NET CORE LI> ul>

    Je suis capable de vous connecter à tous mes sites Web en utilisant à la fois le port IP + de la machine et le nom de domaine, ce qui signifie que le proxy inverse fonctionne comme prévu et les dockers sont bien configurés p>

    Je suis capable de connecter fort> au serveur SQL à l'aide de SSMS fort> à partir de ma machine locale, ce qui signifie que le docker SQL Server transfère correctement la connexion TCP sur le port 1433 P> L'application Web identityServer .NET CORE 2 est capable de connecter strud> au serveur SQL lorsqu'il est exécuté sur ma machine locale forte>. P>

    la télécommande -Docker IdentityServer Application ne peut pas atteindre l'instance SQL Server forte> avec l'erreur suivante (raccourcie pour clarté - Trace de pile supprimée) P>

    system.data.sqlclient.sqxception (0x80131904) code>: p>

    Une erreur liée au réseau ou d'instance est survenue lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou inaccessible. Vérifiez que le nom d'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes. P>

    (fournisseur: fournisseur TCP, erreur: 40 code> - Impossible d'ouvrir une connexion à SQL Server) à [...] p> blockQuote>

    Je sais que le serveur SQL est en cours d'exécution et accessible à partir d'Internet, et je sais que le code de l'application n'est pas en faute, car j'ai testé les deux. P>

    donc j'ai déduit que cela a dû Soyez l'italyServer Docker qui bloquait la connexion. J'ai donc essayé: p>

    • en utilisant la commande - exposer 20 code> sur l'italyServer Docker li>
    • Ouverture Mappage du port 20 à l'intérieur du conteneur vers un port à l'extérieur -P 45264: 20 code> en plus du port déjà exposé 80 li>
    • J'ai initialement travaillé sur l'utilisation du port 1433 des deux côtés de la cartographie, mais comme cela n'a pas fonctionné, j'ai essayé d'utiliser un autre port à l'extérieur (20). N'a rien changé li> ul>

      Voici la chaîne Connexion utilisée par ItalyServer (Données sensibles cachées): P>

      Data Source=***.***.***.***,20;Initial Catalog=Identity;Persist Security Info=True;User ID=**;Password=******************
      


6 commentaires

Je ne pouvais pas décider si cela devait être affiché sur Stackoverflow ou sur Serverfault. S'il vous plaît flag & bouge si approprié


Alors, où sont vos paramètres de connexion?


Vous voulez dire que vous voulez que je postine ma chaîne de connexion?


Oui bien sûr.


Je l'ai ajouté. Je le pose à nouveau dans le commentaire afin que vous n'ayez pas besoin de chercher à la source de données OP = *** *** *** *** ***, 20; catalogue initial = identité; Persist Security Info Info = TRUE; ID utilisateur = **; mot de passe = ******************


Cette chaîne de connexion fonctionne parfaitement lorsque j'atteigne le serveur SQL de ma machine locale à l'aide de l'application ItalyServer BTW


4 Réponses :


1
votes

Lorsque vous enveloppez SQL Server dans Docker, la première chose à anticiper est la façon dont vous vous connectez. SQL Server préfère les tuyaux nommés et vous devez définir explicitement le mode sur TCP .

Si la connexion est effectuée localement, n'utilisez pas localhost , changez-le sur 127.0.0.1 . Écrire également explicite TCP: préfixe peut aider, comme ceci: serveur = TCP: x.y.z.q, 1433


1 commentaires

J'ai changé ma chaîne de connexion pour utiliser serveur = TCP: 127.0.0.1,20 mais la même erreur se produit toujours. J'ai essayé de spécifier le TPC: lorsque vous utilisez l'IP publique de la chaîne de connexion, ne fonctionnait pas non plus.



0
votes

Utilisez TCP, 127.0.0.1 et port hôte pour se connecter. Mention dans les paramètres d'Identity Server Docker que cela dépend du conteneur de serveur de base de données SQL. Comme cela, xxx

de cette façon, le conteneur de base de données sera mis à disposition en premier. xxx


4 commentaires

Qu'entendez-vous par «mentionner dans les paramètres d'identity Server Docker que cela dépend du conteneur de serveur de base de données SQL»? Je suis désolé je suis un peu nouveau à Docker, je ne comprends pas ce que vous voulez dire. J'ai essayé d'utiliser - exposent 20 sur l'italyServer Docker si c'est ce que tu veux dire


À l'intérieur du docker composent un fichier YML dans lequel vous avez défini le service Server Identity Server, écrivez DEPEND_ON: Après le nom de service de base de données SQL.


Je n'utilise pas Docker Compose. Mon script de démarrage est basé sur la commande docker exécuter [...] . Je vais chercher comment utiliser "dépend_on" sans composer.


D'accord, vérifiez cela. Si vous n'utilisez pas Docker Compose, vous devez simplement vous assurer que le conteneur SQL DB est en cours d'exécution avant d'exécuter IDP Server.



1
votes

Si j'ai bien compris, vous exécutez SQL Server et ItalyServer (qui a un problème de connexion) dans des conteneurs de docker distincts.

Si cela correspond alors à la section localeHost (I.E. 127.0.0.1) n'est pas correcte. Parce que dans ce cas, IdentityServer tente de se connecter à elle-même. Cela fonctionnerait si l'ItalyServer a exécuté sur la machine hôte, puisque vous transmettez le port SQL Server à celui-ci. Mais dans votre cas, vous devez vous connecter à l'adresse IP du conteneur SQL Server. Compte tenu de tout ce qui précède, je vois trois options pour que vous résolvez ceci:

  1. Vous pouvez obtenir une adresse IP du conteneur SQL Server en exécutant Docker Inspect -f '{{gamme .NetworksSettings.networks}} {{iPaddress}} {{fin de fin}}'
  2. Exécuter le conteneur SQL avec IP statique via Docker Run --P
  3. Exécutez le conteneur SQL avec nom d'hôte spécifié via Docker Run --HostName puis utilisez le nom d'hôte spécifié dans la chaîne de connexion.

    C'est à vous de choisir quelle façon d'aller.


1 commentaires

Il existe d'autres options si vous souhaitez utiliser Docker Swarm, pour la configurer via Compose YML, mais aussi loin que je comprenne que vous ne l'utilisez pas.



0
votes

J'ai fini par abandonner cela pour que cela fonctionne avec un seul hôte, j'ai simplement décidé de faire fonctionner le serveur SQL dans une machine distincte.


0 commentaires