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
きっともう少しあります
ポインタはありますか?
--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が表示されない
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=
あなたのニーズは私に思い出させます サブユーザー 。プライバシーを保護し、安全性を高めるために、Dockerコンテナーでエンドユーザーアプリケーションを実行するように設計されています。
試す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"
これは、あきらめる前に失敗する特定の操作を絞り込むのに役立ちます。