docker でOverlayFSを使っている環境で起こった話です。
自分で調査したわけではないのだが、興味深いことがあったので、記事にしてみました。

概要

xfs の上にOverlayFS を使っているときに、
docker で jupyter/minimal-notebook の最近のバージョン(a249876881d3)が起動できないことがあった。

その後の調査で ext4 の上に OverlayFS でも同様に起動ができなかった

docker run --rm -ti -u root -v $HOME/work:/home/jovyan/work --name jupyter_test -e NB_UID=10001 jupyter/minimal-notebook:a249876881d3

AUFSではどうなのか?

以前docker-machineで作ったaufs環境があったので、試してみると同様のエラーがでた。
詳しくは調べていないが、ある時点でのaufsにも問題があるのかもしれない(すでに治っているかなどもまだ調査していない)

結論

    Fix permissions when host mounting SSL cert/key · jupyter/docker-stacks@b7353bf

jupyter/docker-stacks上のこのコミットとOverlayFSの組み合わせが問題ではないかと考えている。

とすると、base-notebook に対するものなので、docker でOverlayFSを利用している環境では、jupyterの他のイメージも同様の問題がおこる可能性がある。

回避策

以下の方法で回避できる

    • jupyterの少し前のバージョン(8015c88c4b11)を使う

 

    • docker run するときにNB_UIDを指定しない

 

    • OverlayFS(aufs) をやめてdevicemapper など、他のグラフドライバにしてみる。

 

    • 以下の2つのパッチをあてる

ovl: ignore permissions on underlying lookup · torvalds/linux@38b78a5
vfs: add lookup_hash() helper · torvalds/linux@3c9fe8c

カーネルを4.6.0以降にする

(今のところ4.5系や4.4stable系には取り込まれていないとのこと)

原因

xfsでも、ext4でも起こるところから、OverlayFSに問題があると考えている。

    ovl: ignore permissions on underlying lookup · torvalds/linux@38b78a5

エラー

起動すると以下のようなメッセージがでる。

Traceback (most recent call last):
  File "/opt/conda/lib/python3.5/site-packages/traitlets/traitlets.py", line 501, in get
    value = obj._trait_values[self.name]
KeyError: 'runtime_dir'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/conda/bin/jupyter-notebook", line 6, in <module>
    sys.exit(main())
  File "/opt/conda/lib/python3.5/site-packages/jupyter_core/application.py", line 267, in launch_instance
    return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/opt/conda/lib/python3.5/site-packages/traitlets/config/application.py", line 595, in launch_instance
    app.initialize(argv)
  File "<decorator-gen-7>", line 2, in initialize
  File "/opt/conda/lib/python3.5/site-packages/traitlets/config/application.py", line 74, in catch_config_error
    return method(app, *args, **kwargs)
  File "/opt/conda/lib/python3.5/site-packages/notebook/notebookapp.py", line 1058, in initialize
    self.init_configurables()
  File "/opt/conda/lib/python3.5/site-packages/notebook/notebookapp.py", line 838, in init_configurables
    connection_dir=self.runtime_dir,
  File "/opt/conda/lib/python3.5/site-packages/traitlets/traitlets.py", line 529, in __get__
    return self.get(obj, cls)
  File "/opt/conda/lib/python3.5/site-packages/traitlets/traitlets.py", line 508, in get
    value = self._validate(obj, dynamic_default())
  File "/opt/conda/lib/python3.5/site-packages/jupyter_core/application.py", line 99, in _runtime_dir_default
    ensure_dir_exists(rd, mode=0o700)
  File "/opt/conda/lib/python3.5/site-packages/ipython_genutils/path.py", line 167, in ensure_dir_exists
    os.makedirs(path, mode=mode)
  File "/opt/conda/lib/python3.5/os.py", line 241, in makedirs
    mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/home/jovyan/.local/share/jupyter/runtime'

追記2016-06-17 Docker for Mac(beta)でも起きるようです。

自分で確認したのではないが、
Docker for Mac(beta)環境でもおこるようです。

广告
将在 10 秒后关闭
bannerAds