Dockerコンテナ内でクロムを実行しようとすると、次のエラーが表示されます:Gtk:cannot open open display::0
Dockerfile:( https://registry.hub.docker.com/u/jess/chromium/dockerfile に基づく)
FROM debian:jessie
# Install Chromium
RUN sed -i.bak 's/jessie main/jessie main contrib non-free/g' /etc/apt/sources.list && \
apt-get update && apt-get install -y \
chromium \
chromium-l10n \
libcanberra-gtk-module \
libexif-dev \
libpango1.0-0 \
libv4l-0 \
pepperflashplugin-nonfree \
--no-install-recommends && \
mkdir -p /etc/chromium.d/
# Autorun x11vnc
CMD ["/usr/bin/chromium", "--no-sandbox", "--user-data-dir=/data"]
ビルドして実行:
docker build -t chromium
docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --privileged chromium
そしてエラー:
[1:1:0202/085603:ERROR:browser_main_loop.cc(164)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
No protocol specified
[1:1:0202/085603:ERROR:browser_main_loop.cc(210)] Gtk: cannot open display: :0
私はクロムについてあまり知りませんが、:-) Xクライアントに:0に接続するように指示すると、ポート6000(またはXサーバーが実行されているもの)に接続することを伝えますon)+ 0、またはこの場合ポート6000。実際、DISPLAYはIP:PORT(上記の+6000)です。 Xサーバーはホストで実行されているため、以下を設定した場合:
DISPLAY=your_Host_ip:0
うまくいくかもしれません。ただし、Xサーバーは古いクライアントからの接続のみを許可しなかったため、Xサーバーを開く必要があります。ホストで、実行します
xhost +
dockerコンテナを実行する前に。これはすべて、ホストでクロムを実行できることを前提としています(つまり、ホストにXサーバーが存在する)。
参照として追加(Gregからの実際の回答を参照)
Dockerイメージに追加
RUN apt-get update
RUN apt-get install -qqy x11-apps
https://people.ece.cornell.edu/skand/post/x-forwarding-on-docker/
そして、実行します
Sudo docker run --env DISPLAY=unix$DISPLAY --privileged --volume $XAUTH:/root/.Xauthority --volume /tmp/.X11-unix:/tmp/.X11-unix --rm --runtime=nvidia --rm -it -v /home/alex/coding:/coding alexcpn/nvidia-cuda-grpc:1.0 bash
サンプルコマンドを確認する
xclock