コンテナ

DockerコンテナのGUIアプリをMacOSに表示する

コンテナ

Dockerコンテナで動かしたGUIアプリをMacOSで表示する方法です。

Linuxには、オープンソースのGUIアプリケーションがあります。これをMacで動かせると便利です。残念ながらLinuxのGUIアプリは、そのままではMacで動作させることができません。

MacにX Windowとコンテナ環境をセットアップして、コンテナで動かしたGUIアプリをMacに表示して動作させます。

Mac環境に余計な設定を加えずに、再現性が高い使い捨て環境でGUIアプリを動かすことができます。

前提

下記の環境でテストしました。

  1. MacOS Sonoma 14.2.1
  2. Rancher Desktop 1.5.1
  3. 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を起動します。

タイトルとURLをコピーしました