Docker Desktop for Mac上のX ClientをホストのXQuartz(X Window Server)で表示する
$ docker -vDocker version 20.10.0, build 7287ab3$ brew -vHomebrew 2.6.2Homebrew/homebrew-core (git revision ce927; last commit 2020-12-19)Homebrew/homebrew-cask (git revision eb977; last commit 2020-12-19)$ brew info xquartzxquartz: 2.7.11 (auto_updates)https://www.xquartz.org//usr/local/Caskroom/xquartz/2.7.11 (74.6MB)From: https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/xquartz.rb==> NameXQuartz==> DescriptionOpen-source version of the X.Org X Window System
- Docker Desktop for Mac 3.0.2 (50996)
- macOS Catalina Version 10.15.7
XQuartzのインストール(HomebrewとHomebrew Cask)
現在はbrew cask
コマンドは非推奨で、brew
だけでOK(あるいは--cask
オプションをつける)。
XQuartzの場合は--cask
をつけなくても内部で勝手にbrew cask
としてインストールしてくれた。
Homebrew CaskというのはGUIアプリケーション向けのHomebrewの拡張らしいが、Homebrewと何が違うのかわからん。
Warning: Calling brew cask install is deprecated! Use brew install [--cask] instead.
- The Missing Package Manager for macOS (or Linux) — Homebrew
- homebrew-cask — Homebrew Formulae
- Homebrew/homebrew-cask: 🍻 A CLI workflow for the administration of macOS applications distributed as binaries
- command line - What is the difference between
brew
andbrew cask
? - Ask Different - homebrew-cask/USAGE.md at master · Homebrew/homebrew-cask
Homebrewは、開発元からソースコードが配布されていて、そのコンパイル済みのバイナリ(またはソースダウンロード+自動ローカルビルド)を提供するもので、
Homebrew Caskは、*.dmg
が配布されていてマウントして*.app
を/Applications
にコピーする操作(実際には/usr/local/Caskroom
にインストールする)のを自動化する、というものなのだろうか?
--cask
を明示するのは両方に登録されていてもCaskを優先するみたいな指定なのか? XQuartzの場合は--cask
を付けなくてもCaskとしてインストールされた。
# brew install xquartz # これでもよさそうbrew install --cask xquartz
XQuartz.appを起動する。
シェルに環境変数DISPLAYが設定される(/private/tmp/com.apple.launchd.***/org.macosforge.xquartz:0
のような値)。
XQuartzと合わせて導入されるxhostやxeyesにパスが通っていないので、/usr/X11/bin
にパスを通しておく。
# bashの場合:~/.bash_profileexport PATH=/usr/X11/bin:$PATH
起動確認。
xeyes
また、XQuartzのXQuartz > Preferences > Security > Allow connections from network clientsにチ ェックを入れる。 Dockerからアクセスするために必要。 また、この設定はXQuartzを再起動しないと反映されないので、一度XQuartzをQuitして起動しなおす。
テスト用Dockerイメージ
FROM alpine:3RUN apk --no-cache add xeyesCMD ["/usr/bin/xeyes"]
docker build . -t xeyes