Comme vous dites que vous utilisez Fedora 25 avec Wayland, je suppose que vous utilisez le bureau Gnome-Wayland.
Gnome-Wayland exécute Xwayland pour prendre en charge les applications X. Vous pouvez partager l' accès à Xwayland comme vous l'avez fait auparavant avec Xorg.
Votre exemple de commande manque XAUTHORITY
, et vous ne le mentionnez pas xhost
. Vous avez besoin de l'une de ces façons pour autoriser les applications X dans Docker à accéder à Xwayland (ou à n'importe quel X). Comme tout cela n'est pas lié à Wayland, je me réfère à Comment pouvez-vous exécuter des applications GUI dans un conteneur Docker? sur la façon d'exécuter des applications X dans Docker.
Pour faire court, deux solutions avec xhost:
- Autorisez l'accès de votre utilisateur local via xhost:
xhost +SI:localuser:$(id -un)
et créez un utilisateur similaire avec l'option runer docker:--user=$(id -u):$(id -g)
- Découragé: Autorisez l'accès root à X avec
xhost +SI:localuser:root
Piège connexe : X utilise normalement la mémoire partagée (extension X MIT-SHM
). Les conteneurs Docker sont isolés et ne peuvent pas accéder à la mémoire partagée. Cela peut entraîner des problèmes de rendu et des échecs d'accès à la RAM. Vous pouvez éviter cela avec l'option runer docker --ipc=host
. Cela affecte l'isolement du conteneur car il désactive l'espace de noms IPC. Comparez: https://github.com/jessfraz/dockerfiles/issues/359
Pour exécuter des applications Wayland dans Docker sans X, vous avez besoin d'un compositeur Wayland en cours d'exécution comme Gnome-Wayland ou Weston. Vous devez partager la prise Wayland. Vous le trouvez dans XDG_RUNTIME_DIR
et son nom est stocké dans WAYLAND_DISPLAY
. Comme XDG_RUNTIME_DIR
ne permet l'accès que pour son propriétaire, vous avez besoin du même utilisateur dans le conteneur que sur l'hôte. Exemple:
docker run -e XDG_RUNTIME_DIR=/tmp \
-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--user=$(id -u):$(id -g) \
imagename waylandapplication
Les applications QT5 ont également besoin -e QT_QPA_PLATFORM=wayland
et doivent être démarrées avecimagename dbus-launch waylandapplication
x11docker pour les applications X et Wayland dans docker est une solution tout en un. Il se soucie également de préserver l'isolement du conteneur (qui se perd si vous partagez simplement l'affichage de l'hôte X comme dans votre exemple).
/run/user/1000/wayland-0
pour mon bureau personnel.