Dockerコンテナで動かしたGUIアプリをMacOSで表示する方法です。
Linuxには、オープンソースのGUIアプリケーションがあります。これをMacで動かせると便利です。残念ながらLinuxのGUIアプリは、そのままではMacで動作させることができません。
MacにX Windowとコンテナ環境をセットアップして、コンテナで動かしたGUIアプリをMacに表示して動作させます。
Mac環境に余計な設定を加えずに、再現性が高い使い捨て環境でGUIアプリを動かすことができます。
前提
下記の環境でテストしました。
- MacOS Sonoma 14.2.1
- Rancher Desktop 1.5.1
- Homebrew 4.2.11
Mac用のXウィンドウインストール
Macで動作するXサーバをインストールします。
brew install --cask xquartz
Xquartzを起動します。
open -a XQuartz
XQuartzの設定 – セキュリティを開きます。「接続を認証」をチェックします。
コンテナの準備
GUIアプリケーションにxeyesを使います。
DockerfileにGUIアプリケーションをセットアップします。
FROM ubuntu
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
x11-apps \
&& apt-get -y autoremove && rm -rf /var/lib/apt/lists/*
ビルドします。
$ docker build -t xeyes .
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM ubuntu
---> a6be1f66f70f
Step 2/2 : RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends x11-apps && apt-get -y autoremove && rm -rf /var/lib/apt/lists/*
---> Using cache
---> beffc7d2c534
Successfully built beffc7d2c534
Successfully tagged xeyes:latest
$
GUIアプリケーションの起動
ビルドしたコンテナを起動してGUIアプリケーションを起動します。
起動時にDISPLAY変数の設定と.Xauthority
のマウントをするのがポイントです。
$ docker run -v ~/.Xauthority:/root/.Xauthority -e DISPLAY=$(hostname):0 -it --rm xeyes
root@4d795cfd82a6:/# xeyes
下記のようにGUIアプリケーションが起動します。
トラブルシューティング
xeyesが期待通り動作しない場合、次のことを確認します。
docker環境の確認
下記のようなエラーメッセージでコンテナ起動しない場合、dockerが正しく動作していません。
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
dockerを起動して下記のコマンドが正常終了するようにします。
docker ps
XQuartsの認証情報の
コンテナからxeyesを起動すると下記のようなエラーになるケースが有りました。
Invalid *** keyError: Can't open display: ****:0
これは、$HOME/.Xauthority
の情報をリフレッシュすることで解決します。
リカバリ
XQuartsを停止する。
下記のコマンドで$HOME/.Xauthority
をバックアップする。
$ mv ~/.Xauthority ~/Xauthority-$(date +%y%m%d)
XQuartsを再起動する。
$HOME/.Xauthority
が新規に作成されるので、再度コンテナを起動してxeyesを起動します。