2017-05-19 2 views
-1

J'essaie de comprendre comment configurer un environnement de développement pour développer plusieurs API localement.Docker pour la configuration de l'environnement de développement Windows

Mon environnement de développement est la suivante:

machine hôte: 10.10.4.19 SQL Server 2016 Express est installé sur l'hôte d'écoute à 10.10.4.19,1433 que je peux me connecter à localement à partir de l'hôte et d'autres PC sur le réseau.

Docker pour Windows version stable, installé et développé webapis netcore qui sont conteneurisés et exécutés localement que je veux connecter à l'instance SQL Server sur l'hôte.

Idéalement, chaque conteneur aurait une adresse IP statique dans un réseau NAT, mais je n'ai pas réussi à obtenir des adresses IP statiques pour l'installation réseau par défaut NAT avec docker pour Windows.

J'ai essayé de mettre en place un réseau transparent, mais cela ne fonctionnera probablement pas car je ne veux pas vraiment ceux-ci sur le réseau. Je voudrais qu'ils soient uniquement accessibles par l'hôte, ou via un mappage de port par l'IP hôte via la commande docker run -p.

J'ai les conteneurs en cours d'exécution et de travail (sauf pour les adresses IP statiques) mais je ne peux pas accéder à l'hôte. Je peux faire un ping (ce que je suppose être) l'hôte à l'adresse IP de la passerelle trouvée dans le conteneur, mais je n'arrive pas à accéder aux services qui s'exécutent sur l'hôte.

Depuis l'intérieur du conteneur, je peux envoyer un ping à d'autres PC du réseau (IE 10.10.4.22) et avoir accès à Internet, mais pour une raison quelconque, je ne peux pas envoyer de ping à l'hôte au 10.10.4.19. Je reçois la demande expiré. Donc la question que je pose est, comment puis-je configurer un réseau NAT avec un accès Internet où les conteneurs peuvent parler à l'hôte et d'autres conteneurs et l'hôte peut également parler à tous les conteneurs. Et idéalement, je pourrais configurer des adresses IP statiques pour chaque service où je pourrais installer nginx ou un autre proxy inverse sur l'hôte pour aider les demandes de proxy à chaque conteneur.

J'ai essayé de créer un NAT séparé en utilisant le réseau docker create -d NAT mynat mais il me dit que l'objet existe déjà.

J'ai essayé d'accéder à l'instance SQL de l'hôte par l'adresse IP 10.10.4.19 et l'adresse 172.20.xxx.1 définies sur la carte d'interface réseau virtuelle, mais aucune d'elles ne se connecte à l'instance SQL ou à un site/API sur l'hôte. Les conteneurs peuvent cependant accéder aux sites Web/API d'autres PC sur le réseau. Juste pas l'hôte.

Alors je suppose que je demande s'il est même possible d'accéder aux services de l'hôte depuis l'intérieur d'un conteneur?

Beaucoup de la documentation que j'ai trouvé est basé sur linux et je ne sais pas s'il peut être utilisé même ou non

Toute direction peut donner n'importe qui sera grandement appréciée.

EDIT:

Après avoir joué toute la nuit avec les réseaux de docker, je suis en mesure de remplacer le réseau de docker par défaut NAT avec mon propre pour que je puisse spécifier l'adresse IP statique.

Ce que j'ai fait pour cela était d'ajouter "bridge: "none" au fichier daemon.json situé dans C: \ ProgramData \ Docker \ config.Qui lui a valu le réseau NAT par défaut n'est pas créé par défaut

Puis j'ai couru les commandes suivantes dans un powershell admin pour créer mon propre réseau NAT

PS C:\WINDOWS\system32> stop-service com.docker.service 
PS C:\WINDOWS\system32> stop-service hns 
PS C:\WINDOWS\system32> del 'C:\ProgramData\Microsoft\Windows\HNS\HNS.data' 
PS C:\WINDOWS\system32> Get-ContainerNetwork | Remove-ContainerNetwork 
PS C:\WINDOWS\system32> Get-NetNat | Remove-NetNat 
PS C:\WINDOWS\system32> start-service hns 
PS C:\WINDOWS\system32> start-service com.docker.service 
PS C:\WINDOWS\system32> docker network create -d nat --subnet=192.168.1.0/24 --gateway=192.168.1.1 mynat 
d0d31ecf39ec6cada948c3158b176e9a67d7e0ba6458208d9c91b240587c0763 

Je suis alors en mesure de commencer mes conteneurs avec la commande suivante

docker run -itd --net=mynat --ip=192.168.1.25 --rm <containername> 

Cependant: Je suis toujours incapable d'accéder à l'instance SQL Server express sur la machine hôte. Je pensais que je serais en mesure d'y accéder à 192.168.1.1,1433 \ SQL2016 ou 10.10.4.19 \ SQL2016 mais j'obtiens l'erreur: fournisseur: SQL Network Interfaces, erreur: 26 - Erreur Locating Server/instance spécifiée pour les deux.

Pinging 192.168.1.1 renvoie des résultats, cependant le ping 10.10.4.19 renvoie la demande a expiré.

J'ai défini un IP statique de 192.168.1.1 sur l'adaptateur de carte réseau virtuel et cela n'a pas semblé aider quoi que ce soit. Espérons que quelqu'un sait comment accéder à l'hôte depuis un conteneur. Merci!

EDIT2:

Je suis en mesure de frapper un api en cours d'exécution sur l'hôte maintenant. Pour être honnête, je ne suis pas sûr de ce qui a changé. Mais je peux maintenant frapper un service au http://192.168.1.1/api fonctionnant sur l'hôte de l'intérieur du conteneur. REMARQUE: que la liaison de port ne semble pas fonctionner malgré la configuration IP statique sur le conteneur. Vous le service sur le port EXPOSER ne peut frapper dans la dockerfile et exécutant la commande docker avec -p 5600:9606 ne pas exposer à 5600 il est toujours exposé seulement sur 9606. appeler 192.168.1.25:9606 œuvres, mais localhost: 5600 ne fonctionne pas

Toutefois, je ne parviens toujours pas à me connecter à l'instance SQL Server Express sur l'adresse IP 192.168.1.1. J'ai essayé d'ajouter l'adresse IP 192.168.1.1 aux liaisons SQL Server, mais cela ne semble pas fonctionner.

SQL Server TCP IP Settings

je peux connecter à partir de l'hôte à 10.10.4.19,1433 \ SQL2016 mais ne peut pas se connecter à 192.168.1.1,1433 \ SQL2016 donc je suppose que la question est à portée de main ici. Le pare-feu Windows est désactivé.

J'ai mis la carte réseau NAT virtuel pour utiliser le 192.168.1.1 IP statique aussi mais ne peut toujours pas se connecter à l'instance SQL Server à 192.168.1.1,1433 \ SQL2016

network setup

+0

Une chance que je pourrais avoir une raison derrière les voix vers le bas ou un commentaire pour aider – Mechanic

+0

C'était une bonne question (et réponse, les deux mises à jour), mais vous pourriez rendre votre question originale plus visible, et relocaliser vos deux modifications dans la réponse (que vous pouvez ensuite accepter) – VonC

Répondre

1

La dernière chose que je avait à faire était d'activer à la fois ipv4 et ipv6 (comme ipv6 a été utilisé pour certaines des vérifications d'authentification je suppose) sur le serveur hôte pour sql server express 2016. Et ajouté des règles de pare-feu.

Espérons que cela aidera quelqu'un d'autre à obtenir la configuration pour le développement local et les déploiements de docker à un seul serveur.

enter image description here

La seule chose que je ne peux toujours pas faire est l'hôte: le mappage de port conteneur