Запуск gui приложений в docker

Запуск gui приложений в docker

Запускаем контейнер, используя созданный ранее образ baseimage-ssh:

sudo docker run --dns 8.8.8.8 -p 127.0.0.1:222:22 -d -i -t baseimage-ssh /etc/init.d/ssh start

Заходи в контейнер:

ssh -p 222 root@localhost

Пытаемся поставить x11-apps. В моем случае система внезапно сообщила, что слыхом не слыхивала о таких чудесах, поэтому пришлось скопировать файл /etc/apt/sources.list с хост-системы. После этого все получилось:

apt-get update
apt-get install x11-apps

Перезаходим по SSH с флагом -X, пытаемся запустить xcalc. Лично я увидел ошибку:

X11 forwarding request failed

Запуск SSH с флагом -v помог понять ее причину:

debug1: Remote: No xauth program; cannot forward with spoofing.

После установки xauth в гостевой системе все заработало. Пробуем кое-что посерьезнее:
a

pt-get install chromium-browser

Chromium у меня так просто тоже не стал запускаться, сказав:

Failed to move to new namespace: PID namespaces supported, Network name
space supported, but failed: errno = Operation not permitted

Правильно запускать его так:

chromium-browser --no-sandbox --user-data-dir /root

Ставим шрифты- иначе вырви глаз.

apt-get install fonts-dejavu fonts-dejavu-core fonts-dejavu-extra fonts-droid fonts-freefont-ttf fonts-kacst fonts-kacst-one fonts-khmeros-core fonts-lao fonts-liberation fonts-lklug-sinhala fonts-nanum fonts-opensymbol fonts-sil-abyssinica fonts-sil-gentium fonts-sil-gentium-basic fonts-sil-padauk fonts-takao-pgothic fonts-thai-tlwg fonts-tibetan-machine fonts-tlwg-garuda fonts-tlwg-kinnari fonts-tlwg-loma fonts-tlwg-mono fonts-tlwg-norasi fonts-tlwg-purisa fonts-tlwg-sawasdee fonts-tlwg-typewriter fonts-tlwg-typist fonts-tlwg-typo fonts-tlwg-umpush fonts-tlwg-waree

Теперь имеем Chromium, как Chromium. Так и не скажешь, что под Docker запущен.

На первый взгляд, в контейнере как-то без разницы, под рутом ты сидишь или нет. Но под рутом можно случайно удалить или испортить файлы, которые удалять или портить не хотелось, и придется откатываться к последнему коммиту, потеряв все другие сделанные изменения. Поэтому на всякий случай заведем нового пользователя:

adduser itc-life
usermod -G sudo irc-life

Под рутом говорим:

xauth list

Появится одна или несколько строчек вроде таких:

089a234b1567/unix:10 MIT-MAGIC-COOKIE-1 0489a12c89a67b567ef012cded343b5f

Переключаемся на юзера:

su irc-life

Для каждой ранее уведенной строчечки говорим:

xauth add (строчечка)

В дальнейшем так далать не понадобится, все сохраняется в файлики.
Теперь говорим:

chromium-browser --no-sandbox

Для удобства можно прописать алиас в .bashrc. В целом все отлично работает, страницы грузятся быстро, даже видео на YouTube можно смотреть. Только звука пока что нет. Давайте же это исправим!
В гостевой системе:

sudo apt-get install libpulse0 pulseaudio

В хост-системе:

sudo apt-get install paprefs

Запускаем paprefs, во вкладке Network Server ставим галочку Enable network access to local sound devices, а также Don’t require authentication. Затем:

sudo service pulseaudio restart

В netstat -tuwpan должны увидеть, что процесс pulseaudio слушает порт 4713. Вам может захотеться добавить парочку правил фаервола, если по умолчанию вы разрешаете кому угодно стучатся на любые ваши порты. Если после выполнения приведенной выше команды ничего не изменилось, попробуйте:

pulseaudio -k
pulseaudio --start

У меня как-то не с первого раза получилось, но в итоге все заработало без необходимости перезагружать Ubuntu.

Теперь пробрасываем порт на гостевую систему:

ssh -X -p 222 -R3333:localhost:4713 root@localhost

В гостевой системе говорим:

PULSE_SERVER="tcp:localhost:3333" chromium-browser --no-sandbox

… и звук пошел! Самое главное теперь — не забудьте сделать commit!

docker commit $(docker ps -lq) newdokerimage

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *