はじめに

この記事は、WSL/WSL2のUbuntuで動かしているDockerコンテナ内のPythonからJupyter Notebookをブラウザで操作する方法を備忘録としてまとめたものです。

接続概要図

Windows上で動作しているWSL2、WSL2上で動作しているDockerコンテナ、と2段階の接続ルートがあるため、コンテナ内で起動したJupyter NotebookをWindowsのブラウザで操作するにはひと手間必要です。

以下に接続概要図を示します。

image.png
    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サービスが起動していない場合は、以下のコマンドを実行してください。

WSL2(ターミナル)
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をお楽しみください

あとはお楽しみください。

bannerAds