【Windows10Home+Docker】でJupyterNotebookを起動する時の注意
Windows10HomeのDocker環境でJupyterNotebookを起動しようとしてはまってしまったので備忘録を残しておきます。
Windows10HomeにDockerをインストールするときはちょっと手間がかかります。本記事では扱いませんので、下記の記事などを参照ください。
課題
LinuxPCでは下記のサイトを参考に作成したdocker-compose.ymlで起動できたのに、自宅のWindowsHomeでは動かないという事態に直面しました。(localhost:8889にてJupyetrLabが開かない。)
version: "3"
services:
notebook:
image: jupyter/datascience-notebook
container_name: dss_notebook_sample
ports:
- "8889:8889"
environment:
- JUPYTER_ENABLE_LAB=yes
volumes:
- ./work:/home/jovyan/work
command: start-notebook.sh --NotebookApp.token=''
原因
原因はWindowsHomeにおけるDockerコンテナの扱いになります。WindowsHomeでは下のような階層になっています。
- Windows10Home => Virtual Box => Linux(仮想マシン) => Dockerコンテナ
そのためymlファイルでポートを指定して開けたとしてもそれは、Linux(仮想マシン)とDockerコンテナ間の話であり、WindowsHomeからは接続できません。
解決策
VirtualBoxのホストOSからゲストOSにアクセスできれば良いのですが、いくつか方法があります。ここでは最も単純な方法である「ポートフォワーディング」を使う手法を紹介します。
-
- VirtualBoxを開き、Dockerに使用されている仮想マシンの設定画面を開く。(下図にて右クリック⇒設定)
-
- 設定の中から「高度」を開く。
-
- 「ポートフォワーディング」を選択する
-
- ホストOSのポートとゲストOSのポートを対応させる。(今回は8889)
これで完了です。
一度、仮想マシンを再起動した後、docker-compose.ymlが保存されているディレクトリにて、下記のコマンドを実行し、バックグランドでコンテナを起動します。
docker-compose up -d --build
以下のコマンドでコンテナに入ります。
docker exec -it dss_notebook_sample bash
JupyterLabを起動します。
start-notebook.sh --NotebookApp.token=''
http://localhost:8889/ にアクセスするとJupyterLabが開いています。