はじめに
研究室のマシン上の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 経由で使う