Posted at

Docker コンテナ上で動く X11 アプリケーションのウィンドウをディスプレイに表示させる

More than 1 year has passed since last update.


やりたいこと


  • Docker ホスト (Linux サーバ) の上で X11 アプリケーションのコンテナを動かす

  • 手元のノート PC (MacBook) から Docker ホストに接続して、コンテナとして動いている X11 アプリケーションのウィンドウを手元のノート PC のディスプレイに表示する

「なんでそんなことやってんだ」と思うかもしれないが、やりたくなったもんはしょうがない。


Docker ホストに X11 Forwarding しながら SSH 接続する

このあたりはググればいくらでも情報が出てくるのでサラッと。


  • Docker ホスト側の sshd_configX11Forwarding yes を設定する

  • Docker ホストに SSH 接続する際に -X オプションを付けるなどして X11 Forwarding を有効にする


X11 アプリケーションの Docker イメージを準備する

今回は簡単な例として xeyes が動くだけの Docker イメージを作る。


Dockerfile

FROM alpine

RUN apk --no-cache add xeyes

CMD ["/usr/bin/xeyes"]


$ docker build -t xeyes .

xeyes という名前の Docker イメージを作成できた。


X11 アプリケーションの Docker コンテナを起動する

コンテナを起動する際のポイントとしては以下の二点。


  • host ネットワーク (--net host) で起動することでディスプレイ ($DISPLAY) にアクセスできるようにする

  • X11 の認証情報 $HOME/.Xauthority をコンテナに共有する

$ docker run --rm -it \

--net host \
-e DISPLAY=$DISPLAY \
-v $HOME/.Xauthority:/root/.Xauthority \
xeyes

ちゃんと起動すれば、このようなウィンドウが手元の PC の画面に表示される。