2 votes

Pourquoi Vagrant dans un conteneur Docker Ubuntu sous Windows recherche-t-il PowerShell ?

Je suis une formation où tous les exemples sont sous Ubuntu, mais je suis sous Windows.

J'ai donc pensé installer un conteneur Docker Ubuntu, et cela s'est bien passé.

Les exemples nécessitent également que VirtualBox et Vagrant soient installés dans Ubuntu, je les ai donc installés dans mon conteneur Ubuntu, et là encore tout va bien.

Cependant, lorsque je lance vagrant up à partir de mon conteneur docker Ubuntu (exécuté dans un PowerShell), je reçois une erreur :

Impossible de trouver l'exécutable PowerShell dans le PATH disponible. Veuillez vous assurer que PowerShell est installé et disponible dans le PATH local, puis exécutez à nouveau la commande.

J'ai essayé d'installer PowerShell pour Ubuntu 20.04 (ma version) en suivant les instructions ici : https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-7.1 L'installation a réussi, mais le même message d'erreur apparaît.

Il semble que Vagrant dans Docker Ubuntu cherche une installation Windows. Il n'y a rien dans mon fichier Vagrant qui fasse référence à quoi que ce soit concernant Powershell.

Est-ce que Vagrant est supporté de cette manière, en fonctionnant dans un conteneur Docker Ubuntu sur Windows dans PowerShell ?

1voto

Maxim Masiutin Points 128

Vagrant lance les exécutables Windows directement depuis Linux. Si Linux est exécuté en tant que sous-système Windows pour Linux (WSL/WSL2) ou en tant que conteneur Docker sous l'hôte Windows, Vagrant depuis Linux cherchera le fichier exécutable PowerShell powershell.exe dans Windows. Il vous suffit d'ajouter le chemin d'accès de PowerShell à la variable d'environnement PATH sous Linux. Par exemple, si vous montez le lecteur Windows C: como /mnt/c sous Linux, ajoutez la variable PATH suivante :

export PATH="$PATH:/mnt/c/Windows/System32/WindowsPowerShell/v1.0"

Vous pouvez ajouter la ligne ci-dessus à votre ~/.profile et le recharger en utilisant les commandes suivantes :

nano ~/.profile
source ~/.profile

De cette façon, Vagrant pourra démarrer.

Par le biais de la variable d'environnement VAGRANT_WSL_ENABLE_WINDOWS_ACCESS En effet, Vagrant comprend qu'il peut accéder au système Windows pour exécuter des fichiers exécutables et utiliser des fonctions telles que les dossiers synchronisés. Vous pouvez trouver plus d'informations sur cette variable sur le site Page respective sur le site officiel de Vagrant . Ainsi, vous pouvez également avoir besoin d'ajouter la variable suivante :

export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"

Avec cette variable, Vagrant lancera les fichiers exécutables de Windows à partir de Linux, y compris l'application Windows cmd.exe l'interpréteur de ligne de commande. Par conséquent, vous devez également ajouter le chemin d'accès à cmd.exe :

export PATH="$PATH:/mnt/c/Windows/System32"

Sinon, vous obtiendrez l'erreur suivante.

The executable 'cmd.exe' Vagrant is trying to run was not
found in the PATH variable. This is an error. Please verify
this software is installed and on the path.

Et si vous utilisez VirtualBox installé dans Windows Host, vous devrez également ajouter le chemin d'accès à celui-ci :

export PATH="$PATH:/mnt/c/Program Files/Oracle/VirtualBox"

Puisque Linux sous WSL est exécuté dans une machine virtuelle, vous ne pourrez pas exécuter un hyperviseur pour Linux comme VirtualBox qui aurait fonctionné sous WSL. Ainsi, Vagrant à partir de Linux utilisera VirtualBox installé sur l'hôte Windows.

Assurez-vous que vous utilisez la dernière version de Vagrant, ou au moins la 2.2.15, sinon il risque de ne pas pouvoir exécuter correctement les exécutables Windows à partir de Linux. Quoi qu'il en soit, l'exécution de Vagrant à partir de Linux pour créer des machines virtuelles dans Windows VirtualBox ne se déroule pas toujours sans heurts, vous pouvez obtenir des erreurs comme celle-ci :

There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "a1d5c124-261b-4e4b-a11a-88f7bfdda6df", "--type", "headless"]

Stderr: VBoxManage.exe: error: Failed to get device handle and/or partition ID for 
0000000001cf34e0 (hPartitionDevice=0000000000000a39, Last=0xc0000002/1) 
(VERR_NEM_VM_CREATE_FAILED)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

Pour éviter ces erreurs, et faire en sorte que Vagrant fonctionne de manière fiable, il suffit d'exécuter Linux sous du matériel physique, et non à partir de WSL ou d'un conteneur docker sous Windows. Dans ce cas, VirtualBox fonctionnera également depuis Linux, et Vagrant n'aura pas besoin de communiquer entre Linux et Windows en exécutant des exécutables Windows sur Linux.

Il existe un Vidéo YouTube sur l'installation de Vagrant sous Ubuntu 18 en WSL1 pour Windows 10 et VirtualBox . Mais comme cette vidéo montre l'utilisation d'un ancien logiciel, il se peut que les logiciels plus récents ne fonctionnent pas comme décrit dans la vidéo. Vous pouvez exécuter Vagrant avec --debug pour trouver ce qui ne va pas, mais cela ne permet pas toujours de trouver la solution. Voici un exemple d'exécution de Vagrant avec une sortie de débogage :

vagrant --debug up

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X