web-dev-qa-db-ja.com

DockerコンテナーからChromiumを実行する方法

環境

  • MacOSシエラ10.12.6
  • Dockerバージョン17.09.0-ce、ビルドafdb6d4
  • Ubuntu 16.04
  • XQuartz 2.7.9

DockerコンテナからMacデスクトップにChromiumブラウザを開きたいのですが。

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としてChromeブラウザを実行すると失敗します

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を使用

エラーを削除 serverfaultのスレッドを参照 が、UIが表示されない

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

Chromiumが表示されない

更新20171011

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

Chromiumを開始していますGtk: cannot open display: [...] org.macosforge.xquartz:0エラー

$ 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=
9
zabumba

あなたのニーズは私に思い出させます サブユーザー 。プライバシーを保護し、安全性を高めるために、Dockerコンテナーでエンドユーザーアプリケーションを実行するように設計されています。

2
Setop

試すMacはありませんが、一般的な提案をいくつか次に示します。

X11は通常、ディスプレイを所有するユーザーのみが読み取ることができるキーファイルで保護されているため、ファイルシステムのアクセス許可を使用して、そのファイルを読み取ることができる他のプログラムのみが接続できることを表明します。クライアントはそのファイルを読み取り、その内容をソケットを介してサーバーに繰り返します。だから、私はあなたが正しい軌道に乗っていたと思います

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

次に、SSH X11転送設定を表示しますが、DockerコンテナーにSSHで接続していることは示しません。 SSH転送は通常、以下によって使用されます。

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

これを行うには、Dockerコンテナー内でSSHサーバーを実行する必要があります。これは少し労力が必要です...

次に、DISPLAY=/path/to/socket以前は使用していません。これがMacOSの発明である場合、ドッキングされたUbuntuはそのフォーマットを理解できない可能性があります。

最後に、chromeが実際にdockerコンテナー内から 'strace'コマンドを使用して実行しようとしていることを確認できます。

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

これは、あきらめる前に失敗する特定の操作を絞り込むのに役立ちます。

1
M Conrad