2017-07-17 1 views
2

Je suis dans une situation où les conteneurs docker doivent parler à une application non dockerisée et à des conteneurs docker dans un autre hôte. Disons qu'il y a trois serveurs A, B et C. Le serveur A a deux conteneurs docker qui exécutent les conteneurs JBoss App Server. Le serveur B, un hôte non docker a une base de données MySQL. Le serveur C possède un autre ensemble de conteneurs.Comment faire pour que les conteneurs docker parlent à une application non-dockerized?

Je souhaite que le conteneur du serveur d'applications JBoss se connecte à la base de données MySQL résidant sur un autre hôte et extrait les informations de la base de données. JBoss doit également parler des conteneurs résidant dans le serveur C.

Comment faire pour que cela se produise?

PS: Je suis nouveau à Docker

Répondre

4

conteneurs en pont/pont réseau défini par l'utilisateur peut accéder extérieur automatiquement. Cela se produit via le masquage IP et Docker s'en charge.

  • mysql db est dans le serveur B
  • Un serveur
  • a une route vers le serveur B où mysql db est en cours d'exécution.
  • 2 conteneurs sont le serveur A

en supposant que ce qui précède, les 2 conteneurs doivent être en mesure d'atteindre db mysql.

Il existe une autre question connexe fréquemment posée à propos des conteneurs accédant au service dans localhost. Vous pouvez consulter cette discussion ici (From inside of a Docker container, how do I connect to the localhost of the machine?)

Réponse à la question mise à jour:

Lorsque vous mettez en conteneur réseau overlay en mode essaim, il crée aussi un réseau de passerelle (docker_gwbridge). Ce pont est créé par défaut pour l'accès externe. Vous avez raison, dans ce cas, le conteneur fait partie du réseau de recouvrement et de pont. En utilisant le réseau de recouvrement, les conteneurs du serveur A peuvent parler aux conteneurs du serveur C. Pour que le conteneur du serveur A atteigne la DB (application non conteneurisée), vous avez juste besoin de l'adresse IP et du port de la base de données. . Tant que l'adresse IP de la base de données est accessible depuis le serveur A, elle sera également accessible à partir du conteneur qui s'exécute sur le serveur A via le réseau pont. Vous n'avez besoin d'aucun drapeau DNS spécial ou quoi que ce soit d'autre.

+0

Hi @Sreeni Est-il impossible de faire cela en mode overlay? Et une autre requête. Quel est le but du drapeau DNS dans la commande d'exécution? Puis-je fournir un drapeau --dns dans la commande docker run pour pointer vers la base de données résidant dans le serveur B? –

+0

Salut Aditya, vous pouvez utiliser le réseau de superposition pour connecter 2 conteneurs, mais vous devez utiliser le réseau de pont pour atteindre IP de DB. Dans le réseau de superposition, docker_gwbridge fournit une connectivité externe. L'indicateur DNS vous permet d'utiliser des serveurs DNS externes. Par défaut, docker utilise le serveur DNS dans le moteur docker et pour les noms qu'il ne trouve pas, il utilise le serveur DNS de l'hôte. J'ai capturé des problèmes courants de mise en réseau de Docker et des solutions ici (https://www.slideshare.net/SreenivasMakam/docker-networking-common-issues-and-troubleshooting-techniques). pls voir si cela aide. – Sreeni

+0

Bonjour @Sreeni J'ai modifié la question originale. AFAIK, les conteneurs peuvent faire partie de plusieurs réseaux. Les conteneurs dans les serveurs A et C peuvent donc utiliser la superposition. Alors que les conteneurs dans A et MySQL DB peuvent tirer parti du réseau pont défini par l'utilisateur. Ai-je raison? Mais je suis toujours confus comment faire des conteneurs pointent vers l'application non-dockerized? Existe-t-il une commande spécifique pour y parvenir ou existe-t-il un drapeau spécifique comme --dns? Je suis désolé de venir avec beaucoup de questions :) –