Запуск 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