はじめに
研究室のマシン上のDockerでJupyter Notebookを使う際に自分のmacからアクセスできるようにしたときの話です。
他の方の記事を見ながら作業する上でつまずいた点を中心に書きます。
概要
リモートサーバのDocker上で起動したJupyter Notebookに他端末からアクセスする。
ポイント
-
- Dockerの起動時にポートを指定
-
- Jupyter Notebook起動時にIPとパスワードを指定
- SSH Port Forwardingを使って、他端末のローカルホストにリモートサーバをマッピング
作業
1. Dockerの起動時にポートを指定
Jupyter Notebookはデフォルトでポート番号が8888になるのでローカルのポートを割り当てます。
$ docker run -p 8888:888 その他オプション
2. Jupyter Notebook起動時にIPとパスワードを指定
2.1 パスワードの設定
ipythonを利用します。Docker上でipythonを実行して、以下のように入力します。
from notebook.auth import passwd
passwd()
パスワード(決める)を入力すると、暗号化された文字列が発行されます。これはJupyter Notebook起動時に必要になるので、メモしておきましょう。
メモできたら、ipythonはexitして問題はないです。
2.2 パスワードとIPの指定
IPの指定と先ほど作成したパスワードの指定を行なってください。
先ほど入力したパスワードをローカルPCからJupyter Notebookにアクセスするときに使うことになります。
$ jupyter notebook --ip=0.0.0.0 --NotebookApp.password='sha1:パスワードを設定したときの文字列'
Jupyter Notebook起動時に表示されるtokenを利用する方法もあるようですが、tokenの入力ではログインページがリロードされるだけでファイルにアクセスすることはできませんでした。(原因解明中ごめんなさい)
3. 他端末のローカルホストにリモートサーバをマッピング
Jupyter Notebookを起動するためにsshしたターミナルとは別のターミナルを開いて、SSHログインする。このとき以下のようにマッピングを行う。
$ ssh -L 8888:localhost:8888 <username>@<remotehost>
この後、ローカルの端末からhttp://localhost:8888にアクセスすると、パスワードの入力画面が現れます。2.1で設定したパスワードを入力すると、無事にJupyter Notebookを開くことができます。
おわり
前も1度この作業を行なっていたはずでしたが、作業メモがなくて困ったので未来の自分のためにも残しておくことにしました。
エラー内容や細かい作業はついつい必死になってしまうとメモをするのを忘れてしまいますが、ちゃんと残していきたいですね。
下記のページをとても参考にさせていただきました。ありがとうございます。
参考:
サーバーのDockerで起動したJupyter Notebookを他のパソコンからアクセスできるようにした話
リモートサーバの Jupyter Notebook を SSH Port Forwarding 経由で使う