1. 前提
OS: Mac OSX
Docker, homebrewをインストール済み
GUIで動作させたいDockerコンテナがある
2. 実行方法
(1) 環境のセットアップ
homebrewを使って必要なソフトウェアをインストールしていきます.
homebrewのインストールがまだであれば以下のコマンドを実行してください.
1 |
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
最後に,XQuartzというX Window Systemのクライアントを実行します.
1 2 3 4 |
brew install socat brew install caskroom/cask/brew-cask brew cask install xquartz open -a XQuartz |
(2) socatの実行
(1)の最後に立ち上げたXQuartzのウィンドウ上にて以下のコマンドを実行します.
1 |
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\" |
XQuartzのウィンドウ上にて実行することがポイントです.
不安であればウィンドウ上でecho $DISPLAYを実行し,値が返ってくることを確認してください.
(3) dockerコンテナの実行
以下のようにdockerコンテナを実行してください.
1 |
docker run -e DISPLAY=192.168.0.2:0 docker_container |
ポイントは
・DISPLAY=で指定するIPはdockerを実行している(=host側の)端末のIPです.
ifconfig等を実行して,端末に割り当てられているIPを確認してください.
docker containerの内部からアクセス可能なIPである必要があります.
繋がらない場合は,docker run docker_container /bin/bash 等でコンテナ内のbashに入り,pingで疎通確認をしてみてください.
-e は環境変数を設定するオプションです./bin/bash内で自分でプログラムを動かす際は,export DISPLAY=192.168.0.2:0 等で環境変数を設定してください.(設定の仕方はコンテナのディストリビューションによります)
・docker_containerには実行したいコンテナ名を入力してください.
3. 経緯
tensorflowを勉強するために,LearningTensorflow.comのサンプルを実行していたが,python-tkを利用していたためGUI環境が必要となった.
Googleで調べて見るとQiitaなどに載っているが(以下エントリ参照),いずれも断片的な情報でそのまま実行してもうまくいかなかったため,まとめてみました.
参考サイト