Як ви говорите, ви використовуєте Fedora 25 разом з Wayland, я вважаю, що ви використовуєте робочий стіл Gnome-Wayland.
Gnome-Wayland запускає Xwayland для підтримки X-додатків. Ви можете поділитися доступом до Xwayland, як і раніше, з Xorg.
Ваш приклад команда пропускає XAUTHORITY, і ви не згадуєте xhost. Вам потрібен один із таких способів, щоб дозволити програмам X у докері отримати доступ до Xwayland (або будь-якого X). Оскільки все це не пов’язано з Wayland, я посилаюсь на те, як можна запускати програми GUI у контейнері docker? про те, як запустити X програми в докер.
Що стосується короткого, два рішення з xhost:
- Дозвольте вашому локальному користувачеві доступ через xhost:
xhost +SI:localuser:$(id -un)та створіть аналогічного користувача з опцією запуску docker:--user=$(id -u):$(id -g)
- Відхилено: Дозволити кореневий доступ до X за допомогою
xhost +SI:localuser:root
Пов'язаний Pitfall : X зазвичай використовує загальну пам'ять (розширення X MIT-SHM). Контейнери Docker ізольовані та не мають доступу до спільної пам'яті. Це може призвести до помилок візуалізації та відмов оперативної пам'яті. Ви можете уникнути цього за допомогою опції запуску докера --ipc=host. Це впливає на ізоляцію контейнера, оскільки він вимикає простір імен IPC. Порівняйте: https://github.com/jessfraz/dockerfiles/isissue/359
Для запуску додатків Wayland у докері без X вам потрібен запущений композитор Wayland, як Gnome-Wayland або Weston. Ви повинні поділитися сокетом Wayland. Ви знаходите його, XDG_RUNTIME_DIRі його ім’я зберігається в WAYLAND_DISPLAY. Оскільки XDG_RUNTIME_DIRдозволяє лише доступ для власника, вам потрібен той самий користувач у контейнері, що і на хості. Приклад:
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
Програми QT5 також потребують -e QT_QPA_PLATFORM=waylandі потрібно починатиimagename dbus-launch waylandapplication
x11docker для додатків X і Wayland в докер - це рішення в одному. Він також піклується про збереження ізоляції контейнера (що втрачається, якщо просто ділитися дисплеєм хоста X, як у вашому прикладі).
/run/user/1000/wayland-0для мого особистого робочого столу.