Image Docker qui comprend du vin et des vignerons pour exécuter des applications Windows sur Linux et MacOS
Le conteneur Docker-Wine peut être exécuté avec le transfert X11 ou en tant que serveur RDP en fonction de votre cas d'utilisation. La valeur par défaut consiste à utiliser le transfert X11 qui utilise le serveur X de votre machine pour rendre les graphiques directement dans votre session actuelle et lire les sons via PulseAudio (redirection audio sur Linux uniquement).
L'utilisation de Docker-Wine avec un serveur RDP permet d'exécuter le conteneur sur une machine sans tête ou une machine qui peut ne pas exécuter un serveur X. Vous pouvez ensuite utiliser un client de bureau distant pour vous connecter au conteneur qui peut être situé sur votre machine locale ou distante. Il s'agit actuellement de la seule solution si vous avez besoin de son sur macOS.
L'utilisation du script docker-wine est le moyen le plus simple de commencer et devrait être tout ce dont vous avez besoin pour Linux et MacOS.
docker-wineSur Linux:
wget https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
chmod +x docker-wineSur macOS:
curl -O https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
chmod +x docker-winedocker-wine avec le transfert X11L'exécution du script sans aucun autre argument commencera une session de bash interactive:
./docker-wine Vous pouvez remplacer la session de bash interactive par défaut en ajoutant wine , winetricks , winecfg ou toute autre commande valide avec leurs arguments associés:
./docker-wine wine notepaddocker-wine avec XVFBDémarre un affichage de tampon de trame défautant à: xvfb: 95 -Scure 0 320x200x8 Exportation Affichage vers le numéro de serveur: 95
./docker-wine --xvfb./docker-wine --xvfb=:95,0,320x200x8docker-wine attaché avec Notty ./docker-wine --nottydocker-wine avec le serveur RDP Exécutez avec l'option --rdp pour démarrer le serveur RDP avec une session de bash interactive:
./docker-wine --rdpOu, vous pouvez exécuter le conteneur comme un démon détaché qui fonctionne en arrière-plan. Pour commencer le démon:
./docker-wine --rdp=startEnsuite, pour arrêter le démon:
./docker-wine --rdp=stopTous les ordinateurs de bureau et serveurs Windows sont livrés avec le client de connexion à distance préinstallée et les utilisateurs de MacOS peuvent télécharger gratuitement l'application Microsoft Remote Desktop à partir de l'App Store. Pour les utilisateurs de Linux, je vous suggère d'utiliser le client Remmina Remote Desktop.
Pour le nom d'hôte, utilisez localhost si le conteneur est hébergé sur la même machine que vous exécutez votre client de bureau à distance et pour les connexions distantes, utilisez simplement le nom ou l'adresse IP de la machine à laquelle vous vous connectez. Remarque: Pour se connecter à une machine distante, il faudra exposer le port TCP 3389 via le pare-feu.
Pour vous connecter, utilisez les détails du compte d'utilisateur par défaut suivant:
Username: wineuser
Password: wineuserdocker-wineDémarrez le conteneur comme racine:
./docker-wine --as-rootOu démarrez le conteneur comme vous avec le même nom d'utilisateur, UID, GID et chemin d'accueil (particulièrement utile lors de la liaison au système de fichiers local):
./docker-wine --as-meVous pouvez combiner des options:
./docker-wine --as-root --rdpVous pouvez également utiliser la syntaxe Docker standard pour ajouter autant de variables d'environnement supplémentaires, d'appareils et de volumes que vous avez besoin:
./docker-wine --env= " MY_ENV_VAR=some_value " --device=/dev/snd --volume= " myvol:/some/path:ro " --volume= " /usr/data:data " Voir l'aide docker-wine pour une liste complète des options:
./docker-wine --help Le mot de passe par défaut est wineuser et il passera à votre propre nom d'utilisateur par défaut si vous utilisez l'argument --as-me . Vous pouvez remplacer le mot de passe par défaut en utilisant --password="your_password" , mais même si ce mot de passe est crypté avant de le passer au conteneur, votre mot de passe apparaît toujours dans le texte brut dans la liste de processus pour tout autre utilisateur connecté à la même machine hôte. Selon votre cas d'utilisation, cela pourrait être un problème.
Une solution consiste à utiliser --password-prompt et à être invité à entrer le mot de passe utilisateur lorsque vous instanciez le conteneur Docker-Wine. Cela empêchera votre mot de passe d'apparaître dans la liste de processus de votre machine, mais nécessite la saisie manuelle du mot de passe à chaque fois.
Si l'invitation n'est pas souhaitable, la solution consiste à crypter votre mot de passe avant de le passer au script docker-wine , en utilisant openssl . Cette commande produira un hachage crypté MD5 de votre mot de passe avec un sel aléatoire qui signifie que chaque exécution produira un hachage différent:
openssl passwd -1 -salt $( openssl rand -base64 6 ) " your_password "
Une méthode d'utilisation de cette chaîne sécurisée serait de la stocker sur le disque:
echo $( openssl passwd -1 -salt $( openssl rand -base64 6 ) " your_password " ) > ~ /.docker-wine Ensuite, cat simplement le fichier lorsque vous utilisez le script docker-wine :
./docker-wine --rdp --as-me --secure-password= " $( cat ~ /.docker-wine ) " Tout d'abord, clonez le référentiel de GitHub:
git clone https://github.com/scottyhardy/docker-wine.git
cd docker-winePour construire le conteneur, exécutez simplement:
./build Pour exécuter votre conteneur construit localement, utilisez docker-wine avec le --local Switch:
./docker-wine --local wine notepad Lorsque le conteneur Docker-Wine est instancié avec le script docker-wine , un conteneur de volume nommé winehome est créé et est mappé sur la maison de l'utilisateur dans le récipient. L'utilisation d'un conteneur de volume permet au conteneur Docker-Wine d'être supprimé en toute sécurité après chaque exécution car les données de l'utilisateur persisteront tant que le volume winehome n'est pas supprimé. Cela permet effectivement à l'image docker-wine d'être échangée pour une version plus récente à tout moment.
Vous pouvez créer manuellement le récipient de volume winehome en fonctionnant:
docker volume create winehomeSi vous ne voulez pas le conteneur de volume, vous pouvez le supprimer en utilisant:
docker volume rm winehome Si vous prévoyez d'utiliser scottyhardy/docker-wine comme base pour une autre image Docker, vous devez configurer le même ENTRYPOINT pour activer les modes de transfert X11 et de serveur RDP pour continuer à fonctionner:
FROM scottyhardy/docker-wine:latest
... <your code here>
ENTRYPOINT [ "/usr/bin/entrypoint" ]docker runIl y a un certain nombre de conditions préalables pour que la redirection de Pulseaudio fonctionne sur Linux et pour la redirection X11 pour travailler sur macOS. J'ai l'intention de les documenter dans un wiki dans un avenir proche, mais cela devrait suffire à vous aider à démarrer.
Tout d'abord, tirez la dernière image de DockerHub:
docker pull scottyhardy/docker-wine Voici une commande docker run de base pour la redirection X11 sur Linux qui démarrera une session bash interactive:
docker run -it
--rm
--hostname= " $( hostname ) "
--env= " DISPLAY "
--volume= " ${XAUTHORITY :- ${HOME} / .Xauthority} :/root/.Xauthority:ro "
--volume= " /tmp/.X11-unix:/tmp/.X11-unix:ro "
scottyhardy/docker-wine /bin/bash Voici une commande docker run de base pour démarrer le serveur RDP sur MacOS et Linux avec une session Bash interactive:
docker run -it
--rm
--hostname= " $( hostname ) "
--env= " RDP_SERVER=yes "
--publish= " 3389:3389/tcp "
scottyhardy/docker-wine /bin/bashPour tester la vidéo, essayez d'ouvrir le bloc-notes:
./docker-wine wine notepad Pour tester le son, essayez d'utiliser pacat :
./docker-wine pacat -vv /dev/urandom