Как запустить Chromium из док-контейнера

9

Окружающая обстановка

  • MacOS Sierra 10.12.6
  • Docker версия 17.09.0-ce, сборка afdb6d4
  • Ubuntu 16.04
  • XQuartz 2.7.9

Я хочу открыть браузер Chromium из док-контейнера на моем рабочем столе Mac.

docker run -i -t ubuntu:16.04 /bin/bash
apt-get update
apt-get install alsa-base chromium-browser xauth
adduser myuser

совершить

docker commit 2862a7bfcc2f  acme/mycontainer:0.1

Запуск браузера хрома myuserиз контейнера FAIL

docker run --user myuser -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted

Бьюсь об заклад, есть еще кое-что

Есть указатели?

UDPATE - используя --privileged

Удаляет ошибку. См. Поток на сервере, но пользовательский интерфейс не отображается.

docker run \
       --privileged \
       --user mysuer \
       -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser

и этот

docker run \
   --privileged \
   --net host \
   -v /tmp/.X11-unix:/tmp/.X11-unix \
   -e DISPLAY=$DISPLAY \
   -e XAUTHORITY=/.Xauthority \
   -v ~/.Xauthority:/.Xauthority:ro \
   --name chromium \
   --user mysuser \
   -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser

Хром не появляется

ОБНОВЛЕНИЕ 20171011

docker run \
   --privileged \
   --net host \
   -v /tmp/.X11-unix \
   -e DISPLAY \
   --name chromium \
   --user myuser \
   -i -t acme/mycontainer:0.1 \
   bash

Gtk: cannot open display: [...] org.macosforge.xquartz:0Ошибка запуска Chromium

$ chromium-browser --verbose
[37:37:1011/154632.348303:VERBOSE1:breakpad_linux.cc(1978)] Breakpad disabled
[1:1:1011/154632.378280:VERBOSE1:zygote_main_linux.cc(537)] ZygoteMain: initializing 0 fork delegates
[1:1:1011/154632.378653:INFO:cpu_info.cc(50)] Available number of cores: 4
[37:37:1011/154632.381303:WARNING:browser_main_loop.cc(275)] Gtk: cannot open display: \
      /private/tmp/com.apple.launchd.Y2wR3QWw57/org.macosforge.xquartz:0

На моем Mac отредактировано sshd_config

sudo vim /etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10
XAuthLocation /opt/X11/bin/xauth

На моем Mac DISPLAY

$ env | grep DISPLAY
DISPLAY=/private/tmp/com.apple.launchd.Y2wR3QWw57/org.macosforge.xquartz:0

На диске

ls -al /private/tmp/com.apple.launchd.gCYQToI4lb/*
srw-rw-rw-  1 joel  wheel     0B Oct 11 17:50 
/private/tmp/com.apple.launchd.gCYQToI4lb/org.macosforge.xquartz:0=
zabumba
источник
1
Вы получили что-нибудь с этим, @zabumba?
Дамиан Пауэлл

Ответы:

2

Ваша потребность напоминает мне subuser . Он предназначен для запуска приложения конечного пользователя в док-контейнере, чтобы защитить конфиденциальность и повысить безопасность.

Setop
источник
не забудьте поднять вопрос. посмотрим, сможет ли кто-нибудь еще помочь. Мне нравится ваш указатель на subuser. это интересно
забумба
subuserможет быть "Qubes OS lite", который я искал! Спасибо!
Дейв
1

У меня нет Mac для экспериментов, но вот несколько общих советов:

X11 обычно защищен файлом ключа, который может быть прочитан только пользователем, который владеет дисплеем, таким образом, используя разрешения файловой системы, чтобы утверждать, что только другие программы, которые могут читать этот файл, могут подключаться. Клиенты читают этот файл и затем повторяют его содержимое на сервере через сокет. Итак, я думаю, что вы были на правильном пути с

-e XAUTHORITY=/.Xauthority \
-v ~/.Xauthority:/.Xauthority:ro \

Далее вы показываете настройки пересылки SSH X11, но не указываете, что вы ssh попали в контейнер докера. Пересылка SSH обычно используется:

ssh $HOST -X program-which-launches-gui

Чтобы сделать это, вам нужно запустить SSH-сервер внутри док-контейнера, что немного усилий ...

Затем вы показываете, DISPLAY=/path/to/socketчто я не использовал раньше. Если это изобретение MacOS, то докуризованная Ubuntu может не понимать этот формат.

Наконец, вы можете увидеть, что на самом деле пытается сделать Chrome, используя команду 'strace' из контейнера Docker.

strace chromium-browser 2>&1 | egrep "open|stat|connect|bind"

Это может помочь вам определить, какие конкретные операции завершаются ошибкой, прежде чем они сдаются.

М Конрад
источник
Я дам вам награду из-за хороших указателей, но я не решил проблему. Я создам еще одну награду, чтобы узнать, может ли кто-то еще помочь. В конце концов предоставим Dockerfile. ТНХ
zabumba