Como você diz que está rodando o Fedora 25 com o Wayland, eu suponho que você esteja usando o desktop Gnome-Wayland.
O Gnome-Wayland roda o Xwayland para suportar aplicativos X. Você pode compartilhar o acesso Xwayland como você fez antes com o Xorg.
Seu comando de exemplo erra XAUTHORITY
e você não menciona xhost
. Você precisa de uma dessas maneiras para permitir que aplicativos X no docker acessem Xwayland (ou qualquer X). Como tudo isso não está relacionado ao Wayland, eu me refiro a Como você pode executar aplicativos GUI no container docker? sobre como executar aplicativos X no docker.
Como para curtas, duas soluções com xhost:
- Permitir acesso de usuário local via xhost:
xhost +SI:localuser:$(id -un)
e criar um usuário semelhante com opção de execução do docker:--user=$(id -u):$(id -g)
- Desencorajado: permitir acesso root a X com
xhost +SI:localuser:root
Armadilha : Normalmente, o X usa a memória compartilhada (X extensão MIT-SHM
). Os contêineres do Docker são isolados e não podem acessar a memória compartilhada. Isso pode levar a erros de renderização e falhas no acesso à RAM. Você pode evitar isso com a opção de execução do docker --ipc=host
. Isso afeta o isolamento do contêiner ao desabilitar o namespace do IPC. Compare: link
Para executar aplicativos Wayland no docker sem X, você precisa de um compositor de vias terrestres como o Gnome-Wayland ou o Weston. Você tem que compartilhar o soquete Wayland. Você o encontra em XDG_RUNTIME_DIR
e seu nome é armazenado em WAYLAND_DISPLAY
. Como XDG_RUNTIME_DIR
apenas permite acesso ao seu proprietário, você precisa do mesmo usuário no contêiner que no host. Exemplo:
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
As aplicações QT5 também precisam de -e QT_QPA_PLATFORM=wayland
e devem ser iniciadas com imagename dbus-launch waylandapplication
x11docker para aplicativos X e Wayland no docker é uma solução completa. Ele também se preocupa em preservar o isolamento do contêiner (que é perdido se simplesmente compartilhar o host X como no seu exemplo).