


Comment exécuter des applications GUI dans un conteneur Docker?
Pour exécuter l'application GUI dans le conteneur Docker, vous devez partager le service d'affichage de l'hôte et configurer correctement les autorisations: 1. Exécutez xhost local: docker sur Linux pour permettre au conteneur d'accéder à x11; 2. Mount /tmp/.x11-unix et variables d'environnement d'affichage lors du démarrage du conteneur; 3. Assurez-vous que les dépendances liées à X11 sont installées dans le miroir; 4. Ajouter éventuellement la prise en charge du GPU, de l'audio et du périphérique d'entrée; 5. ou utilisez la solution VNC / Novnc pour obtenir un accès sécurisé multiplateforme; 6. MacOS doit installer XQuartz et définir l'affichage en tant qu'IP hôte; 7. Windows doit coopérer avec VCXSRV et d'autres serveurs X via WSL2 et configurez l'affichage pour pointer de l'IP hôte; Assurez-vous enfin que l'application peut rendre et interagir normalement.
L'exécution d'applications GUI dans un conteneur Docker n'est pas aussi simple que l'exécution d'outils de ligne de commande, car les applications GUI ont besoin d'accès au serveur d'affichage de l'hôte (comme X11 ou Wayland). Cependant, c'est certainement possible - en particulier sur Linux - avec la bonne configuration. Voici comment le faire.

1. Comprendre le défi
Les conteneurs Docker sont isolés par défaut. Une application GUI doit:
- Connectez-vous au serveur d'affichage (généralement X11 sur Linux)
- Accédez aux périphériques d'entrée (souris, clavier)
- Partagez peut-être les ressources GPU pour le rendu
Sans configuration appropriée, l'application échouera avec des erreurs comme:

Erreur: Impossible d'ouvrir l'affichage
2. Activer le transfert x11 (Linux)
La méthode la plus courante sur Linux est de permettre au conteneur d'utiliser le serveur X11 de l'hôte.
Mesures:
Autoriser l'accès à X11 depuis LocalHost Exécutez ceci sur l' hôte :
Xhost Local: Docker
Cela permet aux conteneurs Docker se connecter à votre serveur X. Pour la sécurité, revoyez-le plus tard avec
xhost -local:docker
.Exécutez le conteneur avec des supports appropriés de volume et d'environnement
docker run -it \ --env = "affichage" \ --volume = "$ xauth: /root/.xauthority: rw" \ --volume = "/ tmp / .x11-Unix: /tmp/.x11-unix: rw" \ --Volume = "$ home / .xauthority: /root/.xauthority: rw" \ votre IMAGE DE GUI-GUI
Ou si vous n'utilisez pas
xauth
, une version plus simple fonctionne dans de nombreux cas:docker run -it \ --env = "affichage" \ --volume = "/ tmp / .x11-Unix: /tmp/.x11-unix: rw" \ votre IMAGE DE GUI-GUI
Remplacez
your-gui-app-image
par votre nom d'image réel.Installez les dépendances X11 et GUI dans l'image Assurez-vous que votre Dockerfile comprend:
Exécutez la mise à jour apt-get && apt-get install -y \ x11-apps \ && rm -rf / var / lib / apt / lists / *
Puis testez avec:
xclock
3. Utilisez le matériel et l'accès aux entrées (facultatif mais utile)
Pour l'interaction complète de l'interface graphique (par exemple, le son, les appareils USB, GPU), considérez:
Accélération du GPU (NVIDIA) :
- gpus all
Nécessite
nvidia-docker
installé.Accès à l'audio :
--device / dev / snd \ -e pulse_server = unix: $ {xdg_runtime_dir} / pulse / native \ -v $ {xdg_runtime_dir} / pulse / natif: $ {xdg_runtime_dir} / pulse / natif \ -v ~ / .config / pulse / cookie: /root/.config/pulse/cookie
Accès à la souris / clavier (rarement nécessaire):
--Device / Dev / Input /
4. Alternative: utilisez une configuration VNC ou Novnc
Au lieu d'exposer X11, exécutez un environnement de bureau léger à l'intérieur du conteneur et accédez à lui via un navigateur.
Comment:
- Installez un service de bureau (par exemple, XFCE) et VNC Server dans le conteneur.
- Exposez le port VNC (
5900
). - Connectez-vous à l'aide d'un client VNC ou servez Novnc pour l'accès Web.
Ceci est plus sécurisé et portable sur toutes les plates-formes (y compris MacOS / Windows), mais ajoute des frais généraux.
Exemple de commande:
Docker Run -P 5900: 5900 GUI-DESKTOP-IMAGE
Utilisez ensuite une visionneuse VNC pour vous connecter à localhost:5900
.
5. Considérations de macOS et Windows
MacOS : vous avez besoin d'un serveur X11 comme Xquartz . Après l'installation:
- Activez "Autoriser les connexions à partir des clients réseau" dans les paramètres XQuartz.
- Redémarrez Xquartz.
- Set
IP=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
- Exécutez le conteneur avec:
-e affichage = $ ip: 0
- Et permettre l'accès:
xhost $ ip
Windows (WSL2) : utilisez un serveur X comme VCXSRV ou X410 , puis définissez:
Export Display = $ (awk '/ namesserver / {print $ 2; exit}' /etc/resolv.conf):0
Et exécutez le conteneur avec
--env="DISPLAY"
et le partage de socket x11.
Résumé
Pour exécuter des applications GUI dans Docker:
- Sur Linux , partagez la prise X11 et exécutez
xhost local:docker
. - Sur MacOS / Windows , configurez un serveur X externe et
DISPLAY
de points. - Pour une meilleure isolement, considérez les solutions basées sur VNC .
- Installez toujours les bibliothèques GUI nécessaires dans votre image.
Ce n'est pas trivial, mais une fois configuré, il fonctionne de manière fiable pour le développement, les tests ou l'exécution d'applications de bureau isolées.
Fondamentalement: partagez l'affichage, ouvrez les autorisations et assurez-vous que l'application peut rendre.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
- Sur Linux , partagez la prise X11 et exécutez

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

DockercanbeinstalledonamacusingdockerdesktopbyfollowingTheSesteps: 1.Verifieryourmacmeets there equits - macos10.15ornewer, Intel OrAppleSiliConChip, atleast4gbram, andVirtualizationEnabled; 2.DownloadDockerDeskTopFromHttps: //www.docker.com/products/docker-D

Onwindows, uninstalldockerdesktopviatesettings → applications, thermoveleftOverfilesInwslwithSudorm-rf / var / lib / docker.2.onmacos, quitdocke RDESKTOP, MOVECHOCKER.APTOTRASH, ANDELEDELECONFIGURATIONSFILES DE LA ~ / BIBLIOTHÈQUE.3.onubuntu / Debian, StopTheService, Purgedockerpackagesw

Utilisez la commande dockercp pour copier des fichiers de l'hôte vers le conteneur Docker sans avoir besoin d'exécuter le conteneur; 2. Assurez-vous que le conteneur existe et exécutez dockercp / path / on / hostfile.txtContainer-name: / path / in / conteneur; 3. Si le répertoire cible n'existe pas, vous devez d'abord le créer. Lors de la copie de l'ensemble du dossier, le contenu sera copié récursivement. Une fois l'opération terminée, le fichier sera disponible dans le conteneur, sans reconstruire l'image ni monter le volume.

TobackupadockerContainerwithitsData, FirstBackupNamedVolumeSusingAporaryContainertOceAreatarBallofthevolumeContents.2.Next, préserveContainerConfigurationByExporttingWithDockerinspector, préférablement, bydefiningItinaDockerComposeFile.3

Pour exécuter l'application GUI dans le conteneur Docker, vous devez partager le service d'affichage de l'hôte et configurer correctement les autorisations: 1. Exécutez xhost local: docker sur Linux pour permettre au conteneur d'accéder à x11; 2. Mount /tmp/.x11-unix et variables d'environnement d'affichage lors du démarrage du conteneur; 3. Assurez-vous que les dépendances liées à X11 sont installées dans le miroir; 4. Ajouter éventuellement la prise en charge du GPU, de l'audio et du périphérique d'entrée; 5. ou utilisez la solution VNC / Novnc pour obtenir un accès sécurisé multiplateforme; 6. MacOS doit installer XQuartz et définir l'affichage en tant qu'IP hôte; 7. Windows doit coopérer avec VCXSRV et d'autres serveurs X via WSL2 et configurer l'affichage et configurer l'affichage via WSL2 et utiliser VCXSRV et d'autres serveurs X et configurer l'affichage

La clé pour déployer des applications sur Dockerswarm est d'utiliser des services plutôt que des conteneurs autonomes, et de gérer les configurations, les clés et les mises à jour de roulement via des outils intégrés. 1. Premièrement, conteneurisez l'application et poussez-la vers un référentiel miroir accessible au nœud d'essaim; 2. Utilisez DockerServiceCreate pour définir le service et son état attendu, tels que le nombre de répliques, la cartographie des ports, etc.; 3. Utilisez des dockerSecret et DockerConfig pour gérer respectivement les informations sensibles et les configurations non sensibles et les référencer dans le service; 4. Utilisez DockerServicesCale pour réaliser la mise à l'échelle, utilisez DockerServiceUpdate pour effectuer des mises à jour de version interrompue et peut contrôler la stratégie de mise à jour via les paramètres.

Pour limiter l'utilisation des ressources des conteneurs Docker, vous pouvez spécifier les limites de CPU et de mémoire via des paramètres de ligne de commande lors de l'exécution du conteneur. Les méthodes spécifiques sont les suivantes: 1. Utiliser --memory (ou -m) pour définir la limite supérieure de la mémoire, telle que --memory = "512m" signifie que la limite est de 512 Mo de RAM; 2. Utiliser - Memory-Swap pour définir la mémoire totale plus l'espace de swap, tel que --memory-swap = "1g" signifie un total de 1 Go disponible; 3. Utiliser --CPUS pour limiter le nombre de noyaux de processeur, tels que --cpus = "1,5" signifie que jusqu'à 1,5 noyaux de processeur sont utilisés; 4. Utiliser --CPU-S

SanglingImageSaUntaggedlayers n'est pas associé à un contrat de contrôle et à un canneauvoyovedusingDocker’sbuilt-Incommands.1.UsedOckerimagePrunetosafeLyRemovedangLingImages après la congrat, un Oraddd-FoltoforreMovalswithoutprompt.2.
