【问题标题】:Running Raku notebook in Docker在 Docker 中运行 Raku 笔记本
【发布时间】:2018-02-13 21:28:51
【问题描述】:

在 Jupyter 笔记本中运行 Raku (previously aka Perl 6) kernel 将非常适合可重复性和易用性(个人观点)。

我想在 docker 容器中运行 Perl 6 notebook 并在我的网络浏览器中访问它。为此我created this docker image

创建 docker 镜像的代码是:

FROM sumankhanal/rakudo:2019.07.1

RUN apt-get update \
    && apt-get install -y ca-certificates python3-pip && pip3 install jupyter notebook \
    && zef install Jupyter::Kernel --force-test

ENV TINI_VERSION v0.6.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /usr/bin/tini
RUN chmod +x /usr/bin/tini
ENTRYPOINT ["/usr/bin/tini", "--"]

EXPOSE 8888
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0"]

我在 Windows 10 64 bit 上,我的 docker 的 IP 地址是 192.168.99.100

当我尝试使用此代码运行容器时:

docker run -it -p 8888:8888 sumankhanal/raku-notebook 在码头工人终端

我收到此错误:

$ docker run -it -p 8888:8888 sumankhanal/raku-notebook
[I 14:26:43.598 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
Traceback (most recent call last):
  File "/usr/local/bin/jupyter-notebook", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.5/dist-packages/jupyter_core/application.py", line 267, in launch_instance
    return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/usr/local/lib/python3.5/dist-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.5/dist-packages/traitlets/config/application.py", line 87, in catch_config_error
    return method(app, *args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/notebook/notebookapp.py", line 1296, in initialize
    self.init_webapp()
  File "/usr/local/lib/python3.5/dist-packages/notebook/notebookapp.py", line 1120, in init_webapp
    self.http_server.listen(port, self.ip)
  File "/usr/local/lib/python3.5/dist-packages/tornado/tcpserver.py", line 142, in listen
    sockets = bind_sockets(port, address=address)
  File "/usr/local/lib/python3.5/dist-packages/tornado/netutil.py", line 197, in bind_sockets
    sock.bind(sockaddr)
OSError: [Errno 99] Cannot assign requested address

有什么帮助吗?

【问题讨论】:

  • 我在我的虚拟机上运行了你的镜像,它运行良好,除了它唯一需要的是CMD 中的--allow-root。您可以重新启动 Docker,然后重试吗?同时更新 CMD。它可以工作,但我在笔记本中看不到 Perl 内核
  • @Tarun 是的,我已根据您的建议更新了图像。现在我可以运行笔记本了,但笔记本选项中没有显示 Perl 6 内核,尽管我按照in the page of the kernel 中提到的说明进行操作。 :(
  • 我认为您错过了将内核链接到 Ipython 的重要步骤。 jupyter-kernel.p6 --generate-config
  • @Tarun 谢谢。我让它工作了。我在哪里可以阅读更多关于 linking the kernel 的信息?我什至写了a blog on running Perl 6 kernel

标签: docker jupyter-notebook jupyter raku


【解决方案1】:

您需要在 Dockerfile 的 CMD 中添加 --allow-root。您还需要在 dockerfile 中将内核与 jupyter 链接

jupyter-kernel.p6 --generate-config

完成此操作后,您将能够看到 dockerfile。我还注意到您的图像尺寸非常大,您应该尝试为 jupyter 找到一个更好的基础图像,而不是您拥有的那个。

有关安装内核的更多详细信息,请参阅以下链接

https://jupyter.readthedocs.io/en/latest/install-kernel.html

【讨论】:

  • 但我在上面的链接中找不到linking kernel
猜你喜欢
  • 2023-03-10
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 2023-01-09
  • 2016-11-04
  • 2016-10-26
  • 1970-01-01
相关资源
最近更新 更多