RFe*_*Fen 5 python jupyter jupyter-lab
我正在尝试将 jupyter-lab 添加到我现有的 docker 映像之一(带有 R、python 和特定于工作的库)以进行交互式测试。
一个有效的示例是这个 Dockefile:
FROM my_existing_image
# Install jupyter lab (assuming python3 and pip3 already installed)
RUN pip3 install jupyterlab
# Declare port used by jupyter-lab
EXPOSE 8888
# Set default command
CMD ["jupyter", "lab", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]
Run Code Online (Sandbox Code Playgroud)
但是,我们有一个共享 NFS 驱动器,我们将其安装在/mnt/NAS. 要以正确的权限从 docker 容器访问共享文件夹,我们通常使用以下标志启动它们:
docker run -u $(id -u ${USER}):$(id -g ${USER}) -v /mnt:/mnt my_image
Run Code Online (Sandbox Code Playgroud)
但是,-u( --user) 选项会阻止 juyter-lab 正常启动,并且我收到以下错误消息:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/traitlets/traitlets.py", line 528, 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 "/usr/local/bin/jupyter-lab", line 10, in <module>
sys.exit(main())
File "/usr/local/lib/python3.7/dist-packages/jupyter_core/application.py", line 270, in launch_instance
return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/traitlets/config/application.py", line 663, in launch_instance
app.initialize(argv)
File "<decorator-gen-7>", line 2, in initialize
File "/usr/local/lib/python3.7/dist-packages/traitlets/config/application.py", line 87, in catch_config_error
return method(app, *args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/notebook/notebookapp.py", line 1766, in initialize
self.init_configurables()
File "/usr/local/lib/python3.7/dist-packages/notebook/notebookapp.py", line 1380, in init_configurables
connection_dir=self.runtime_dir,
File "/usr/local/lib/python3.7/dist-packages/traitlets/traitlets.py", line 556, in __get__
return self.get(obj, cls)
File "/usr/local/lib/python3.7/dist-packages/traitlets/traitlets.py", line 535, in get
value = self._validate(obj, dynamic_default())
File "/usr/local/lib/python3.7/dist-packages/jupyter_core/application.py", line 100, in _runtime_dir_default
ensure_dir_exists(rd, mode=0o700)
File "/usr/local/lib/python3.7/dist-packages/jupyter_core/utils/__init__.py", line 13, in ensure_dir_exists
os.makedirs(path, mode=mode)
File "/usr/lib/python3.7/os.py", line 211, in makedirs
makedirs(head, exist_ok=exist_ok)
File "/usr/lib/python3.7/os.py", line 211, in makedirs
makedirs(head, exist_ok=exist_ok)
File "/usr/lib/python3.7/os.py", line 211, in makedirs
makedirs(head, exist_ok=exist_ok)
File "/usr/lib/python3.7/os.py", line 221, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/.local'
Run Code Online (Sandbox Code Playgroud)
我无法找到配置 Dockerfile 来访问驱动器和 jupyter-lab 工作的正确方法。我们经常以同样的方式使用Rocker/Rstudio容器,没有任何问题。
您有什么建议吗?感谢您的帮助。
我收到了相同的错误消息,因为容器的 $HOME 变量是 root /,如果没有sudo.
所以,对我来说,解决方案是将 $HOME 设置为指向可写目录。例如,
mkdir ./.home # make a virtual home directory
docker run \
-u $(id -u):$(id -g) -v $(pwd):$(pwd) -w $(pwd) -e HOME=$(pwd)/.home \
-it --rm --init -p 8888:8888 your_image \
jupyter lab --ip=0.0.0.0 --port=8888 --no-browser
Run Code Online (Sandbox Code Playgroud)