Як ви говорите, ви використовуєте 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
для мого особистого робочого столу.