やりたいこと
- Docker ホスト (Linux サーバ) の上で X11 アプリケーションのコンテナを動かす
- 手元のノート PC (MacBook) から Docker ホストに接続して、コンテナとして動いている X11 アプリケーションのウィンドウを手元のノート PC のディスプレイに表示する
「なんでそんなことやってんだ」と思うかもしれないが、やりたくなったもんはしょうがない。
Docker ホストに X11 Forwarding しながら SSH 接続する
このあたりはググればいくらでも情報が出てくるのでサラッと。
- Docker ホスト側の
sshd_config
でX11Forwarding 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 の画面に表示される。