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_DIRet son nom est stocké dans WAYLAND_DISPLAY. Comme XDG_RUNTIME_DIRne 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=waylandet 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-0pour mon bureau personnel.