Linuxでは、X Window Systemを使用してGUI環境が提供される。 これをMacの環境から見る。

Macの環境準備

まずはMac向けX WIndow SystemであるXQuartzをインストールする。
homebrewで提供されているため、brewコマンドでインストールする

brew install --cask xquartz

GUIのアプリケーションのため、caskオブションが必要となる

インストールが終わったら、一旦Macをログアウトもしくは再起動する。

再ログインすると、DISPLAY環境変数が設定された状態になる。

XQuartzの設定

インストールしたXquartzの設定 > セキュリティのタブで、ネットワーク・クライアントからの接続を許可にチェックを入れておく

docker-composeへの設定

以下は設定例。重要な設定は7行目と9行目である。

version: "3.8"

services:
  xapp:
    build: ./docker
    environment:
      DISPLAY: host.docker.internal:0
    volumes:
      - ~/.Xauthority:/root/.Xauthority:ro

X11の仕組みとして、アプリケーションプロセスを実行するのがクライアント、GUIを画面描画するのがサーバとなる。
DISPLAY変数に設定する接続先はMacのアドレスとなる。
docker desktopを使用しているのであれば、ホスト側IPはhost.docker.internalで指定できる。

また、接続の認証のために.Xauthorityをコンテナ内のホームディレクトリにマウントする

動作確認

適当にGUIアプリを起動してみる。debianベースのイメージならx11-appsパッケージからxeyesが利用できる

apt install x11-apps
xeyes

Mac側のXQuartz内でxeyesアプリが動作していることが確認できればOK