Como usted dice que está ejecutando Fedora 25 con Wayland, supongo que está utilizando el escritorio Gnome-Wayland.
Gnome-Wayland ejecuta Xwayland para admitir aplicaciones X. Puede compartir el acceso a Xwayland como lo hizo antes con Xorg.
Su comando de ejemplo falla XAUTHORITY
y no lo menciona xhost
. Necesita una de estas formas para permitir que las aplicaciones X en Docker accedan a Xwayland (o cualquier X). Como todo esto no está relacionado con Wayland, me refiero a ¿Cómo puede ejecutar aplicaciones GUI en el contenedor docker? sobre cómo ejecutar aplicaciones X en Docker.
En resumen, dos soluciones con xhost:
- Permita que su usuario local acceda a través de xhost:
xhost +SI:localuser:$(id -un)
y cree un usuario similar con la opción de ejecución de Docker:--user=$(id -u):$(id -g)
- Desalentado: permitir el acceso de root a X con
xhost +SI:localuser:root
Problemas relacionados : X normalmente usa memoria compartida (extensión X MIT-SHM
). Los contenedores Docker están aislados y no pueden acceder a la memoria compartida. Eso puede conducir a fallas de renderizado y fallas de acceso a RAM. Puede evitar eso con la opción de ejecución de Docker--ipc=host
. Eso afecta el aislamiento del contenedor ya que deshabilita el espacio de nombres IPC. Comparar: https://github.com/jessfraz/dockerfiles/issues/359
Para ejecutar aplicaciones Wayland en Docker sin X, necesita un compositor de wayland en ejecución como Gnome-Wayland o Weston. Tienes que compartir el zócalo Wayland. Lo encuentras en XDG_RUNTIME_DIR
y su nombre se almacena en WAYLAND_DISPLAY
. Como XDG_RUNTIME_DIR
solo permite el acceso a su propietario, necesita el mismo usuario en el contenedor que en el host. Ejemplo:
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
Las aplicaciones QT5 también necesitan -e QT_QPA_PLATFORM=wayland
y deben iniciarse conimagename dbus-launch waylandapplication
x11docker para aplicaciones X y Wayland en docker es una solución todo en uno. También se preocupa por preservar el aislamiento del contenedor (que se pierde si simplemente comparte la pantalla X del host como en su ejemplo).
/run/user/1000/wayland-0
mi escritorio personal.