はじめに
Jupyter LabをDockerで環境構築する
の記事で、JupyterLabをDockerで環境構築しようとしていたのですが
sudo docker run \
--rm \
-e TZ=Asia/Tokyo \
-p 8888:8888 \
--name jupyterlab \
-v $(pwd)/code:/code \
jupyterlab:latest \
start.sh jupyter lab --NotebookApp.password="sha1:xxxxxxxxxxxxxxxxxxxxxxxx"
このあたりで、どうも環境が構築できない・・・
というのも、-v
オプションは
自分のディレクトリ:コンテナ側のディレクトリ
で、ディレクトリ内容を同期できるものなのですが、どうやら同期が出来ませんでした。
自分の環境がMacであることや、途中で操作ミスを行っていた可能性もあります。
今回は、その中で学んだことを、まとめていきます。
コンテナ内を調べる
まず
docker run --rm --name test -it jupyterlab:latest bash
このコマンドで、jupyterlabイメージをtestというコンテナ名で作って、bashでつないでみます。
このコンテナ内で
echo $HOME
とすると、/home/jovyanがホームのようです。
-vに与えるディレクトリを変えてみる
結論から言えば、自分の場合-v $(pwd):/home/jovyan/code
や-v $(pwd)/code:/home/jovyan/code
とすることでうまくいきました。
そこまでに右往曲折あったのですが・・・
docker run -v `pwd`:/home/jovyan/work/works -p 10000:8888 --name jupyter jupyter/datascience-notebook
まず、以上のようにして、jupyterで普通に調べることにしました。
上記のようにすると、pwd
=(Users/ganariya/~/The_ML)の内容
- Dockerfile
- .gitignore
- README.md
が,/home/jovyan/work/worksに展開されていました。
つまり、
/home/jovyan/work/works/Dockerfile
/home/jovyan/work/works/.gitignore
のようになっていました。
どうやら、pwd:コンテナディレクトリ
は、ホストのpwd
にある内容を、/home/jovyan/work/works
内に展開しているようですね><
次に
docker run -v `pwd`/abc:/home/jovyan/work/works -p 10000:8888 --name jupyter jupyter/datascience-notebook
としてみました。つまり、ホストするMac側のファイルを、pwd
ではなく
pwd
/abcディレクトリのものにしよう!というわけです。
このようにすると、pwd/abc
の中身が/home/jovyan/work/worksに入っていました。
ここまでは想定通りのようです。
なぜ問題が起こったのか?
ここまでで調べた結果から
Jupyter
やJupyterLab
がtreeの基準にする位置が原因で、同期がされていないんだな という結論に至りました。
JupyterやJupyterLabは、おそらく変更はできると思うのですが
公式イメージからビルドしたコンテナを開くと
上記のようになっており、/home/jovyan
がtreeのものになっています。
よって、$(pwd):/home/jovyan/work
や、$(pwd):/home/jovyan/work/works
は、jupyterで触れたわけです。
しかし、最初の$(pwd)/code:/code
では、問題が発生します。
ホストディレクトリの$(pwd)/codeディレクトリを、コンテナのルートディレクトリのcodeというディレクトリに作成します。
しかし、datascience-notebookなどのデフォルトのイメージでは、そのコンテナのHomeが/home/jovyan
であるため、/code
に触ることが出来ません。
よって、マウント自体はされているのですが、見えることのないさらに上位の階層でマウントされていたわけです・・・><
結論
脳死で使いたいときはJupyterに関しては
-v $(pwd):/home/jovyan/code
のように、/home/jovyan
以下に置こう・・・><!
感想
/codeでもできそう・・・!(ホームディレクトリを変えたり、JupyterLabの起動位置を変える・・・?)