Je reçois une erreur en essayant d'utiliser la fonctionnalité Docker avec mon projet .NET core 2.0. J'ai reçu un message d'erreur disant
Visual Studio Container Tools nécessite que Docker soit en cours d'exécution avant de générer, déboguer ou exécuter un projet conteneurisé. Pour plus d'informations, veuillez consulter: http://aka.ms/DockerToolsTroubleshooting
J'ai suivi le lien et, après avoir réalisé que j'avais Windows 10 Home x64, j'ai dû installer Docker Toolbox, au lieu de Docker pour Windows. Maintenant, il a installé cet exécutable appelé
Docker Quickstart Terminal
Est-ce ainsi que l'on est censé démarrer ces services de docker? J'ai essayé d'exécuter cet exécutable, et il semble fonctionner. Mes conteneurs sont en cours d'exécution, mais l'erreur pour Visual Studio Container Tools persiste toujours.
Qu'est-ce que je rate? Une version de Windows supérieure à Home est-elle requise pour utiliser la prise en charge du conteneur Docker dans Visual Studio 2017?
MISE À JOUR:
J'ai essayé de suivre la suggestion de Quetzcoatl, et je reçois toujours la même erreur dans Visual Studio à propos de ces outils. Voici ce que j'ai exécuté dans le Docker Quick Start Terminal. J'ai essayé de créer le projet après que Visual Studio a réussi à ouvrir le projet et j'obtenais toujours l'erreur susmentionnée concernant les outils de conteneur.
Mon fichier devenv.exe se trouve à
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe
et mon fichier de solution se trouve à
D:\Développement\Visual Studio\Musify2\Musify2\Musify2.sln
MISE À JOUR 2:
J'ai exécuté certaines des commandes suggérées pour essayer dans le terminal de démarrage rapide de docker et voici les résultats de ces commandes quetz
Avec Docker Toolbox, c'est un peu délicat, mais en fait, le core-2.0 n'a rien à voir ici. Il s'agit de docker, de docker-toolbox et de VS.
Tout d'abord:
Est-ce ainsi que l'on est censé démarrer ces services de docker? J'ai essayé d'exécuter cet exécutable, et il semble fonctionner.
Oui, ça l'est. Si la machine/les services Docker fonctionnent - c'est bien!
Maintenant, vous devez vous rendre compte que dans docker, généralement, les informations sur comment/où le docker s'exécute sont conservées dans variables d'environnement. Le script quickstart
démarre non seulement le docker-machine pour vous et vérifie certaines choses de base, il configure également quelques variables d'environnement afin que plus tard toutes les commandes comme docker
, docker-compose
etc sait où chercher la machine virtuelle docker. Dans votre/notre cas, ces informations consistent principalement en une IP du VM et un numéro de port que Docker écoute.
.. et votre Visual Studio n'a aucune connaissance de cela, parce que, je parie que vous avez exécuté VisualStudio à partir de StartMenu ou à partir de l'icône du bureau ou en double-cliquant sur un fichier de solution, il n'a donc aucune chance d'obtenir les variables d'environnement depuis la console quickstart
.
La solution est assez simple: assurez-vous que VS obtient ces informations. Autrement dit, assurez-vous qu'il obtient ces variables d'environnement, et assurez-vous qu'il obtient leur état frais, car l'IP/port peut parfois fluctuer. Ne vous contentez donc pas de les copier dans les paramètres de votre système d'exploitation, car rien ne les actualisera jamais automatiquement.
Le moyen le plus simple que j'ai trouvé est de fermer Visual Studio, d'exécuter la console de démarrage rapide de la boîte à outils Docker, puis d'exécuter VisualStudio à partir de cette console, par exemple, pour mon VS2017 Community Edition:
Starting "default"...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
(.......snip..........)
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com
Start interactive Shell
quetzalcoatl@LAP049 MINGW32 ~
$ /c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/Community/Common7/IDE/devenv.exe C:\\PATH\\TO\\MY\\SOLUTION.sln
Le chemin est assez long à écrire, même avec la complétion TAB, donc faites généralement un minuscule .sh
script pour exécuter cela pour moi.
BTW! Notez que le chemin vers DEVENV doit être de type unix (/c/Program\ Files...
), car le shell mingw doit comprendre que, tandis que le chemin vers SOLUTION doit être un chemin Windows normal (c:\projects\foo\bar\..
) car VisualStudio essaiera de lire cela après le démarrage.
C'est ce que j'ai fait pour que vs 2017 travaille sur Windows 10 Home avec Docker-Toolbox. Vous suivez cela et je vous garantis que cela fonctionnera. Notez que cela ne s'applique qu'à Windows 10 Home qui ne prend pas en charge Docker natif pour l'application Windows:
Installer Docker-Toolbox sur la maison W10
Exécutez le terminal docker QuickStart une fois pour créer la machine docker. Cela prend du temps. Soyez donc patient pendant qu'il attribue l'adresse IP et d'autres choses
Une fois cela fait, il vous montrera une invite de commande. Tapez "docker-machine ip default". Notez l'adresse IP car vous en aurez besoin plus tard
Fermez la fenêtre du terminal QuickStart. C'était juste pour initialiser l'image boot2docker.iso d'un petit serveur Linux Ubuntu dans l'application virtualbox (aka docker-machine aka default vm). Si vous n'êtes pas familier avec la technologie de virtualisation ou Oracle virtualbox, arrêtez la lecture et lisez-les d'abord, puis recommencez. Mais si vous le faites, continuez avec plaisir
Comme je l'ai mentionné, votre instance de docker-machine est une machine virtuelle Linux et il est donc évident que vous ne pouvez ouvrir que des projets créés à l'aide de la technologie de base .net. Malheureusement, pour un framework .net complet, vous devrez soit exécuter des conteneurs Windows qui ne sont disponibles que sur Windows 10 Pro, soit créer votre propre serveur Windows Nano ou 2016 Server VM sur Virtualbox, puis utiliser et suivre les étapes de Docker natif pour Windows sur le site Web Dockers. . À partir de là, le reste de cette réponse sera utile à ceux qui souhaitent exécuter des projets principaux sur Linux vm/docker-machine uniquement.
Ouvrez Windows Power Shell en mode administrateur et tapez ‘docker-machine ls’ pour confirmer que VM par défaut est en cours d’exécution. Peut également faire "état par défaut de la station d'accueil" et devrait retourner "en cours d'exécution"
Maintenant, ouvrez l'application Virtualbox qui exécute votre VM par défaut et cliquez sur Paramètres. Ouvrez l'onglet "lecteurs partagés" où vous devez vous assurer que le dossier ‘c:\Users’ sur la machine hôte est mappé/monté en tant que dossier ‘c/Users’ dans le vm. Notez que cette étape est super importante et qu'elle est manquante, cela entraînera beaucoup de problèmes pour qu'elle fonctionne correctement.
Notez également que votre solution/projet/base de code DOIT être enregistré sous ‘c:\Users \’ pour que cela fonctionne correctement. C'est si vous voulez l'utiliser OOTB. Je ne voulais pas perdre de temps à essayer de monter un dossier en dehors du chemin autorisé. Mais si vous êtes du genre aventureux, s'il vous plaît, essayez par tous les moyens de le comprendre et faites-nous savoir comment vous avez fait
Maintenant, comme Quetzalcoatl l'a correctement mentionné, il doit connaître cette machine à docker. La seule façon qui se produit est que les variables d'environnement soient définies. Allez-y donc et exécutez cette commande ‘docker-machine env default | Invoke-Expression "dans la fenêtre PowerShell. C'est la sauce magique pour que vs se comporte bien avec docker-machine
Allez-y et ouvrez vs normalement soit en cliquant sur votre solution de projet ou en créant un nouveau projet/solution. Dans Powershell, utilisez la commande 'start' pour ouvrir votre solution vs existante ou une nouvelle instance vs. Pro-tip: si vous créez une nouvelle solution, NE sélectionnez PAS l'option de docker Linux au moment de choisir le type de modèle de projet. Vous pouvez totalement ajouter la prise en charge de docker une fois que votre solution est entièrement configurée et prête à l'emploi. En fait, laissez-le incontrôlé et laissez vs créer votre solution. De cette façon, vous aurez la possibilité de créer et d'exécuter votre solution dans les modes IIS Express ou auto-hébergé pour voir si votre core2.0 fonctionne même correctement
Une fois satisfait que tout a fonctionné et que vous avez vu la page d'accueil OOTB maintenant, il est temps d'ajouter le support docker en cliquant sur votre projet, en survolant Ajouter puis en cliquant sur 'Ajouter un support Docker'. Cela créera un nouveau projet de docker (.dcproj) et ajouter un tas de fichiers liés à docker
Maintenant, je ne vais pas entrer dans le vif du sujet du docker ici, mais vous remarquerez que votre projet n'est plus le démarrage et que le projet de docker nouvellement créé l'est. C'est un comportement parfaitement normal et voulu. Cela signifie que vous êtes configuré et prêt à lancer votre application à l'aide de conteneurs Docker. Alors allez-y et cliquez sur le bouton "Docker" pour voir que votre travail acharné porte enfin ses fruits. Encore une fois, soyez patient, car il faut un certain temps pour créer des images et faire tourner des conteneurs, mais une fois terminé, le vs démarre et attache le débogueur
Ici, vous serez à nouveau déçu et vous vous sentirez sans valeur car lorsque le navigateur ouvrira une nouvelle fenêtre ou un nouvel onglet, il y aura une erreur de page inaccessible. La raison en est que l'adresse du navigateur pointe vers localhost qui n'est plus le serveur Web. Votre "serveur Web" est désormais votre conteneur Docker. Par conséquent, vous devrez remplacer localhost par l'adresse IP que vous avez récupérée ci-dessus. Le numéro de port reste tel quel. Une fois que vous aurez soumis la page, vous serez soulagé et ravi de voir la page d'accueil/l'itinéraire fonctionner. Cela devrait également permettre le débogage dans vs. si, pour une raison quelconque, ce n'est pas le cas, vous devrez peut-être supprimer un dossier appelé .vsdbg dans le dossier c:\Users\et réexécuter l'application.