はじめに
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の起動位置を変える・・・?)