Linux
docker
X11

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

やりたいこと

  • 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 の画面に表示される。