如何将 Jupyter 实验室 docker 化
How to dockerize Jupyter lab
我正在尝试对 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
我怎样才能码头化 jupyter lab
? [通过解决这个错误]
启动时 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 Docker 堆栈的 'Read The Docs' 页面中发现对 Jupyter Labs 的引用(参见 here)。文档说:
JupyterLab is preinstalled as a notebook extension starting in tag c33a7dc0eece.
他们建议使用如下命令:
docker run -it --rm -p 8888:8888 jupyter/datascience-notebook start.sh jupyter lab
我想我不妨在这里添加参考,以防它对其他人有用。 (例如,在 Docker Hub 上并不是很明显,它支持 Jupyter Labs。)
作为使用 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.
的更多信息
您真的不必自己动手。 Jupyter Docker Stack 提供现成的 JupyterLab 图像,可与 JupyterHub docker 图像一起使用。集线器可以为每个用户“生成”一个单独的容器 运行 一个给定的 JupyterLab(搜索负责魔法的 DockerSpawner
class)。
我将其添加为单独答案的原因是 注意事项:虽然 useful links 可在 Internet 上获得,但它们通常已过时并且两者之间存在不一致使“富有成效的 Docker Jupyter 化”相当痛苦的文档和现实。仅举几个我遇到的例子:
- 如果您在 Docker 主机上没有 root 权限,那么将临时用户添加到 Hub 容器会相当复杂。我需要这个,因为我正在教授课程,参与者必须获得课程结束后删除的临时帐户,并且不允许我用这些帐户污染 Docker 主机。
- 登录Jupyter的用户身份存在很多混淆Hub vs实际用户的身份运行在JupyterLab容器中:后者总是
jovyan
,UID=1000。这可能会导致有关文件所有权和权限的意外意外。
- 如果要将示例脚本和数据集“添加”到实验室容器中,以便每个课程参与者都能获得一组标准化的文件来开始工作,那么您将需要 startup hooks 进行复制操作有一些有趣的要求。例如。复制脚本 不得 具有
.sh
扩展名,因为那样它就意味着做一些不同的事情...
YMMV,当然。尽管如此,当它工作时,它是一个相当优雅的设置。我很快就会在一些不幸的学生身上真正地尝试一下:-)
我正在尝试对 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
我怎样才能码头化 jupyter lab
? [通过解决这个错误]
启动时 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 Docker 堆栈的 'Read The Docs' 页面中发现对 Jupyter Labs 的引用(参见 here)。文档说:
JupyterLab is preinstalled as a notebook extension starting in tag c33a7dc0eece.
他们建议使用如下命令:
docker run -it --rm -p 8888:8888 jupyter/datascience-notebook start.sh jupyter lab
我想我不妨在这里添加参考,以防它对其他人有用。 (例如,在 Docker Hub 上并不是很明显,它支持 Jupyter Labs。)
作为使用 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.
的更多信息您真的不必自己动手。 Jupyter Docker Stack 提供现成的 JupyterLab 图像,可与 JupyterHub docker 图像一起使用。集线器可以为每个用户“生成”一个单独的容器 运行 一个给定的 JupyterLab(搜索负责魔法的 DockerSpawner
class)。
我将其添加为单独答案的原因是 注意事项:虽然 useful links 可在 Internet 上获得,但它们通常已过时并且两者之间存在不一致使“富有成效的 Docker Jupyter 化”相当痛苦的文档和现实。仅举几个我遇到的例子:
- 如果您在 Docker 主机上没有 root 权限,那么将临时用户添加到 Hub 容器会相当复杂。我需要这个,因为我正在教授课程,参与者必须获得课程结束后删除的临时帐户,并且不允许我用这些帐户污染 Docker 主机。
- 登录Jupyter的用户身份存在很多混淆Hub vs实际用户的身份运行在JupyterLab容器中:后者总是
jovyan
,UID=1000。这可能会导致有关文件所有权和权限的意外意外。 - 如果要将示例脚本和数据集“添加”到实验室容器中,以便每个课程参与者都能获得一组标准化的文件来开始工作,那么您将需要 startup hooks 进行复制操作有一些有趣的要求。例如。复制脚本 不得 具有
.sh
扩展名,因为那样它就意味着做一些不同的事情...
YMMV,当然。尽管如此,当它工作时,它是一个相当优雅的设置。我很快就会在一些不幸的学生身上真正地尝试一下:-)