【问题标题】:How to dockerize Jupyter lab如何码头化 Jupyter 实验室
【发布时间】:2018-08-08 00:59:50
【问题描述】:

我正在尝试对 Jupyter Lab 进行 docker 化,因此我尝试如下创建一个 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


我怎样才能 dockerize jupyter lab ? [通过解决这个错误]

【问题讨论】:

    标签: docker jupyter-notebook dockerfile jupyter-lab


    【解决方案1】:

    当你启动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"]
    

    【讨论】:

    • 说你现在有这个容器在服务器上运行,你如何从另一台计算机访问这个 Jupyter Lab?
    • 当我将实例的公共 IP 作为 IP 地址在 --ip= 中时,我收到错误 OSError: [Errno 99] Cannot assign requested address
    【解决方案2】:

    在搜索时我遇到了这个问题,然后在 Jupyter Docker Stacks 的“阅读文档”页面中发现了对 Jupyter Labs 的引用(请参阅here)。文档说:

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

    他们建议使用如下命令:

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

    我想我不妨在这里添加参考,以防它对其他人有用。 (例如,在 Docker Hub 上并不是很明显支持 Jupyter Labs。)

    【讨论】:

      【解决方案3】:

      作为使用 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】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-15
          • 2018-08-23
          • 1970-01-01
          • 2017-03-23
          相关资源
          最近更新 更多