概要
Dockerでjavaのイメージを作成して教材などに記載されているプログラムを動かしていると、AWTを使用したGUIのプログラムがでてくるので、X11をmac側から起動して、Dockerと「ソケット」を共有することで通信を行う方法のメモ
前提条件
・brewがインストール済みであること
XQuartzをインストール
brew install XQuartz
XQuartzを起動
下記のコマンドを実行すると、XQuartzというGUIアプリが,ホスト側Macに表示されます。
Docにあるアイコンから環境設定->セキュリティをクリックして、「ネットワーク・クライアントからの接続を許可」をクリック
open -a XQuartz
Macからログアウト
設定を保存したあと、一度Macからログアウトしてログインしなおす。
ログイン後、環境変数$DISPLAYに値が入っていることを確認。
❯ echo $DISPLAY
/private/tmp/com.apple.launchd.xxKvBuaLGT/org.xquartz:0
ホスト側のIPアドレスを登録
$ xhost + localhost
localhost being added to access control list
xhostの許可設定は、下記のコマンドで確認できる
$ xhost
access control enabled, only authorized clients can connect
INET6:localhost
INET:localhost
※設定をリセットしたい場合は、XQuartzを終了させる。
Dockerfileを編集
イメージには’X Window System’がインストールされていないので、入れる。
FROM openjdk:11
RUN apt-get update
RUN apt-get install -y xserver-xorg
WORKDIR /usr/src
docker-compose.ymlを編集
- ホスト側の’/tmp/.X11-unix’
を、
docker側の’/tmp/.X11-unix’にマウントする - 環境変数DISPLAYをセットする。
version: '3.6'
services:
java:
build: ./docker/java
ports:
- 8080:8080
tty: true
volumes:
- ./:/usr/src:cached
- /tmp/.X11-unix:/tmp/.X11-unix
environment:
- DISPLAY=host.docker.internal:0
“host.docker.internal” とはDockerDesktopで用意されている、コンテナからローカル環境を参照する際のホスト名です。
参考URL
- KH CoderをDocker for Macで動かす手順
https://zenn.dev/hogenishi/articles/6bcffa389bcfb6 - Docker Desktop for Mac上のX ClientをホストのXQuartz(X Window Server)で表示する
https://blog.aoirint.com/entry/2020/xquartz_docker/
コメント