はじめに
この記事は、WSL/WSL2のUbuntuで動かしているDockerコンテナ内のPythonからJupyter Notebookをブラウザで操作する方法を備忘録としてまとめたものです。
接続概要図
Windows上で動作しているWSL2、WSL2上で動作しているDockerコンテナ、と2段階の接続ルートがあるため、コンテナ内で起動したJupyter NotebookをWindowsのブラウザで操作するにはひと手間必要です。
以下に接続概要図を示します。
- Windows、WSL2、Dockerコンテナでそれぞれ自分の立場で自身を指すLocalhostがすべて同じ名前であることに注意してください。
図に示す通り、それぞれのポートを接続する処理が必要です。
No | 操作 |
---|---|
① | Cドライブのマウントパス(/mnt/c)をコンテナ内にマウントし(/mnt/c/)、WSL2の8888ポートとコンテナの8888ポートを接続するようにDocker実行 |
② | Windows側からWSLへSSH接続(Windowsの8888ポートとWSLの8888ポートをポートフォワーディング) |
③ | Dockerコンテナ内にインストールしたJupyter Notebookを実行 |
↓ | ポートフォワーディングによってWindowsのLocalhostまでJupyterが飛んでくる状態になる |
④ | Jupyter実行時に出力されたLocalhost URLをそのままWindowsのブラウザに貼り付けて開く |
😊 | Cドライブに保存したNotebookを、WSL2上のDockerコンテナで動くJupyterで参照、実行できる |
それぞれのコマンドをまとめると、以下のようになります。
①Dockerコンテナ実行
Cドライブのマウントパス(/mnt/c)をコンテナ内にマウントし(/mnt/c/)、WSL2の8888ポートとコンテナの8888ポートを接続するようにDocker実行
docker run --name XX -v /mnt/c/:/mnt/c/ -p 8888:8888 -d -it IMAGE bash
②SSH接続
まずは、Windowsから見えるWSLのIPアドレスを調べます。
wsl -e hostname -I
# xxx.xxx.xxx.xxx
Windows側からWSLへSSH接続します(Windowsの8888ポートとWSLの8888ポートをポートフォワーディング)
ssh -N -f -L 8888:localhost:8888 username@xxx.xxx.xxx.xxx
ポイント
WSLのSSHサービスが起動していない場合は、以下のコマンドを実行してください。
sudo service ssh restart
③コンテナ内でJupyter実行
Dockerコンテナ内にインストールしたJupyter Notebookを実行
jupyter notebook --ip 0.0.0.0 --port 8888 --allow-root
④ブラウザにURL貼り付け&Jupyter操作
今回はポートフォワーディング元/先ポートを全て8888ポートで統一しているので、単純にWindowsでJupyterを起動した時と同じように、表示されたLocalhostのURLをブラウザで開くだけです。
To access the notebook, open this file in a browser:
~~~~~~~~~~~~~~~~
Or copy and paste one of these URLs:
http://localhost:8888/?token=~~~~~~~~~~~~~~~~~
or http://127.0.0.1:8888/?token=~~~~~~~~~~~~~~~~~
😊 Dockerコンテナで動かすJupyterをお楽しみください
あとはお楽しみください。