La tâche était simple : installer Docker sur mon ordinateur portable de travail sous Windows, qui était déjà un vrai patchwork. J'ai installé Docker Desktop, créé des conteneurs, tout allait bien, mais j'ai rapidement découvert que VMware Workstation avait arrêté de lancer des machines virtuelles avec l'erreur :
VMware Workstation et Device/Credential Guard ne sont pas compatibles. VMware Workstation peut être exécuté après la désactivation de Device/Credential Guard.
Le travail s'est arrêté, il faut réparer ça d'urgence.

En cherchant sur Google, j'ai compris que cette erreur provient de l'incompatibilité entre VMware Workstation et Hyper-V sur une même machine. C'est un problème connu, et il existe un solution officielle de VMware à ce sujet. , avec un lien vers la base de connaissances de Microsoft. . La solution consiste à désactiver le Defender Credential Guard (le point 4 de la section Désactiver le Windows Defender Credential Guard m'a aidé) :
mountvol X: /s
copy %WINDIR%System32SecConfig.efi X:EFIMicrosoftBootSecConfig.efi /Y
bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "EFIMicrosoftBootSecConfig.efi"
bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=X:
mountvol X: /dAprès le redémarrage, Windows demandera si vous souhaitez vraiment désactiver le Defender Credential Guard. Oui ! Ainsi, VMware Workstation retrouvera un fonctionnement normal, et nous nous retrouverons au même point qu'avant l'installation de Docker.
Je n'ai pas trouvé de solution pour réconcilier Hyper-V et VMware Workstation, j'espère qu'ils seront compatibles dans de futures versions.
Un autre chemin
J'utilise déjà VMware Workstation depuis longtemps à diverses fins, j'ai essayé de passer à Hyper-V et VirtualBox, mais leurs fonctionnalités n'ont pas satisfait mes besoins, ainsi je reste avec VMware. Il s'avère qu'il existe une solution pour faire coexister VMware, Docker et VSCode dans un même environnement de travail.
— permet de lancer le Docker Engine sur un hôte virtuel et de s'y connecter à la fois à distance et localement. Il existe également un driver de compatibilité avec VMware Workstation.
Je ne vais pas détailler les instructions d'installation, juste une liste d'ingrédients :
- ( dans le package)
- Docker Desktop
Oui, Docker Desktop sera malheureusement également nécessaire. Si vous l'avez désinstallé, réinstallez-le, mais cette fois en décochant la case pour apporter des modifications à l'OS, afin de ne pas casser à nouveau VMware Workstation.
Je tiens à préciser que tout fonctionne parfaitement pour un utilisateur standard, les programmes d'installation demanderont une élévation de privilèges quand nécessaire, mais toutes les commandes dans l'invite de commandes et les scripts s'exécutent avec l'utilisateur actuel.
En fin de compte, la commande :
$ docker-machine create --driver=vmwareworkstation devUne machine virtuelle dev sera créée à l'intérieur de Boot2Docker, où Docker sera installé.
Cette machine virtuelle peut être attachée à l'interface graphique de VMWare Workstation en ouvrant le fichier vmx correspondant. Cependant, ce n'est pas obligatoire, car VSCode devra maintenant être lancé par un script PowerShell (pour une raison quelconque, docker-machine et docker-machine-driver-vmwareworkstation se trouvaient dans le dossier bin) :
cd ~/bin
./docker-machine env dev | Invoke-Expression
codeVSCode s'ouvrira pour travailler sur le code sur la machine locale et Docker dans la machine virtuelle. Le plugin permet de gérer facilement les conteneurs dans la machine virtuelle sans avoir à utiliser la console.
Difficultés :
Lors de la création de docker-machine, j'ai rencontré un gel du processus :
Waiting for SSH to be available... 
Et après un certain temps, il s'est terminé en dépassant le nombre de tentatives de connexion à la machine virtuelle.
Tout cela est dû à la politique de certificats. Lors de la création de la machine virtuelle, un répertoire ~.dockermachinemachinesdev sera créé dans lequel se trouveront les fichiers de certificat pour la connexion SSH : id_rsa, id_rsa.pub. OpenSSH peut refuser de les utiliser car il considère qu'il y a des problèmes de droits d'accès. Cependant, docker-machine ne vous en dira rien et continuera à se reconnecter jusqu'à ce qu'il en ait assez.
Solution : Dès que la création d'une nouvelle machine virtuelle commence, allez dans le répertoire ~.dockermachinemachinesdev et modifiez les droits sur les fichiers mentionnés, un par un.
Le propriétaire du fichier doit être l'utilisateur actuel, seul l'utilisateur actuel et SYSTEM doivent avoir un accès total, tous les autres utilisateurs, y compris le groupe des administrateurs et les administrateurs eux-mêmes, doivent être supprimés.
Il peut également y avoir des problèmes de conversion des chemins absolus du format Windows au format Posix, ainsi qu'avec le montage de volumes contenant des liens symboliques. Mais c'est une autre histoire.
Source : habr.com
