如何对Jupyter实验室进行码头化

时间:2018-02-28 08:02:10

标签: docker jupyter-notebook dockerfile jupyter-lab

我试图将Jupyter Lab停靠,因此我尝试创建Dockerfile,如下所示,

FROM python:3.6

WORKDIR /jup

RUN pip install jupyter -U && pip install jupyterlab

EXPOSE 8888

ENTRYPOINT ["jupyter", "lab"]


并运行命令docker build . -t jupyter然后docker run jupyter。但遗憾的是我收到了一些错误,如下所示

[I 07:56:34.123 LabApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
Traceback (most recent call last):
  File "/usr/local/bin/jupyter-lab", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.6/site-packages/jupyter_core/application.py", line 266, in launch_instance
    return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/traitlets/config/application.py", line 657, in launch_instance
    app.initialize(argv)
  File "<decorator-gen-7>", line 2, in initialize
  File "/usr/local/lib/python3.6/site-packages/traitlets/config/application.py", line 87, in catch_config_error
    return method(app, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/notebook/notebookapp.py", line 1507, in initialize
    self.init_webapp()
  File "/usr/local/lib/python3.6/site-packages/notebook/notebookapp.py", line 1297, in init_webapp
    self.http_server.listen(port, self.ip)
  File "/usr/local/lib/python3.6/site-packages/tornado/tcpserver.py", line 142, in listen
    sockets = bind_sockets(port, address=address)
  File "/usr/local/lib/python3.6/site-packages/tornado/netutil.py", line 197, in bind_sockets
    sock.bind(sockaddr)
OSError: [Errno 99] Cannot assign requested address


如何定位jupyter lab? [通过解决此错误]

5 个答案:

答案 0 :(得分:8)

当你开始jupyter lab时,你应该定义--ip参数。例如,--ip=0.0.0.0

在此之后你会有另一个错误:

[C 08:14:56.973 LabApp] Running as root is not recommended. Use --allow-root to bypass.

因此,如果您想继续,还需要添加--allow-root

最终Dockerfile是:

FROM python:3.6

WORKDIR /jup

RUN pip install jupyter -U && pip install jupyterlab

EXPOSE 8888

ENTRYPOINT ["jupyter", "lab","--ip=0.0.0.0","--allow-root"]

答案 1 :(得分:2)

在四处搜寻时,我遇到了这个问题,然后继续在Jupyter Docker Stack的“阅读文档”页面中找到对Jupyter Labs的引用(请参阅here)。该文档说:

  

JupyterLab已作为笔记本扩展名预装,从标签c33a7dc0eece开始。

他们建议使用类似以下的命令:

docker run -it --rm -p 8888:8888 jupyter/datascience-notebook start.sh jupyter lab

我想我最好在这里添加参考,以免对其他人有用。 (例如,在Docker Hub上并没有立即显示是否支持Jupyter Labs。)

答案 2 :(得分:0)

运行
docker run jupyter --allow-root --ip=0.0.0.0 --port=8888 或将ENTRYPOINT更改为ENTRYPOINT ["jupyter", "lab", "--allow-root","--ip=0.0.0.0", "--no-browser"]

答案 3 :(得分:0)

作为使用JupyterLab构建自己的Docker映像的替代方法,您还可以使用ML Workspace映像。 ML Workspace是一个开放源代码的Web IDE,将Jupyter,JupyterLab,VS Code和许多其他工具与库组合到一个方便的Docker映像中。部署单个工作区实例非常简单:

docker run -p 8080:8080 mltooling/ml-workspace:latest

所有工具都可以从同一端口访问,并集成到Jupyter UI中。您可以找到有关如何访问JupyterLab here的更多信息。

答案 4 :(得分:0)

您真的不必自己动手。 Jupyter Docker Stack 提供现成的 JupyterLab 图像,可与 JupyterHub 泊坞窗图像一起使用。 Hub 可以为运行给定 JupyterLab 的每个用户“生成”一个单独的容器(搜索负责魔术的 DockerSpawner 类)。

我将其作为单独答案添加的原因是CAVEAT:虽然 useful links 在 Internet 上可用,但它们通常已经过时,并且文档和现实之间存在不一致使“Jupyter 的生产性 Docker 化”相当痛苦。仅举几例我遇到的:

  1. 如果您在 Docker 主机上没有 root 权限,那么将临时用户添加到 Hub 容器会相当复杂。我需要这个,因为我正在教授课程,参与者必须获得课程结束后删除的临时帐户,并且不允许我用这些帐户污染 Docker 主机。
  2. 登录到 JupyterHub 的用户的身份与实际在 Jupyter实验室中运行的用户的身份存在很多混淆 容器:后者始终为 jovyan,UID=1000。这可能会导致有关文件所有权和权限的意外意外。
  3. 如果示例脚本和数据集应“添加”到实验室容器中,以便每个课程参与者都获得一组标准化的文件以开始使用,那么您将需要 startup hooks 用于复制操作,其中包含一些有趣的要求。例如。复制脚本不能.sh 扩展名,因为那样它就意味着做一些不同的事情......

YMMV,当然。尽管如此,当它工作时,它是一个相当优雅的设置。我很快就会在一些不幸的学生身上进行真实的尝试:-)