Translate

2016年12月13日火曜日

Dockerで上げていた Tensorflow コンテナの jupyter がいきなりパスワードを要求してきた

これまでDockerサーバとして使っていたPCのHDDを交換して再インストールし、
この上で gcr.io/tensorflow/tensorflow:latest-gpu

nvidia-docker run -it -p 8888:8888 -p 6006:6006 gcr.io/tensorflow/tensorflow:latest-gpu

で起動して、

http://xxx.xxx.xxx.xxx:8888/

をブラウザでひらいたら..



あれ?パスワード入力画面がでてきた..

コマンド一発起動なので、パスワードなんて何も指定してないんだけど..



-itで実行していたのでコンソール側を見ていると..

The Jupyter Notebook is running at: http://[all ip addresses on your system]:8888/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

ってメッセージが出ていた。


あれ?なんかGETパラメータのtokenがついてる..

で、このGETパラメータ付きのURLで入ってみると、パスワード画面が出てこなくなった..

でもこれだと -d オプションで起動したらtokenがわからなくなる..

とおもって、Dockerfile.gpuを見てたら
jupyter_notebook_config.pyCOPYしているところを発見。

で、このコードを見てみると
環境変数PASSWORDにパスワード文字列を指定できるようになっていた。

と、いうことで

nvidia-docker run -e PASSWORD=password -d -p 8888:8888 -p 6006:6006 gcr.io/tensorflow/tensorflow:latest-gpu

と、起動すればパスワードが「password」になるようになった。



..たのむからREADME.mdくらいには書いておいてほしかったなあ..




p.s.

タグ名に devel とついているイメージのDockerfileCMD /bin/bash となっているので、基本 -it オプションを付けてコマンドラインを有効にして使うことを前提にしています。このため -d オプションで起動するとattach/exec以外なにもできなくなります。

タグ名に devel がついていないイメージのDockerfileCMD /run_jupyter.sh となっており、Jupyterが起動します。このため -it を付けて実行すると、デフォルトトークン(パスワード代わりにつけるHTTP GETパラメータ付きURL)がコンソールに出ますが、シェル操作はできません。 -d オプションを代わりに付ければ、デーモン起動になります。

なお、コンテナ側ポート番号 8888 をホスト側ポート番号 9999 で使いたい場合は、 -p 9999:8888 とつけてください(1つのDockerサーバで複数上げる場合がある)。

ただ..Docker Hub上のイメージの仕様がまた変わることもあります...
(仕様がかわったら、コメント欄に教えていただけると、ありがたいです)

0 件のコメント:

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...