当前位置: 首页 > 知识库问答 >
问题:

如何连接到运行在docker容器上的远程Jupyter笔记本?

卫深
2023-03-14

我运行一个jupyter笔记本在一个docker容器(ubuntu)上运行一个远程机器(亚马逊p2)。我想通过我的浏览器(http://localhost:8883/)访问笔记本,但我得到:

open failed: connect failed: Connection refused

我的ssh配置:

Host p3
    HostName <remote machine ip>
    User <user>
    LocalForward 8883 127.0.0.1:8884

我正在运行容器(在远程机器上):

nvidia-docker run -it -p 8884:8884 <docker image>

在我运行的docker容器上:

jupyter-notebook --NotebookApp.iopub_data_rate_limit=10000000000 --no-browser --port=8884 --allow-root

我能够连接到远程机器上运行的笔记本(不在docker容器中)。

如何从浏览器连接到docker机器上运行的笔记本?

共有1个答案

鞠晋
2023-03-14

这是一个极好的问题。我的日常开发工作流程涉及从我的笔记本电脑连接到运行在gpu加速服务器上docker容器上的jupyter笔记本电脑。

该问题分为三个部分:

>

  • 容器

    主办

    遥远的

    您需要确保您可以ssh到您的容器。我修改了Docker的sshd示例中的Dockerfile。您应该修改Docker示例以满足您的需要;e、 您的用例是否允许您以root用户身份连接

    我已经为无密码ssh设置了容器。注意:您可以预先制作无密码ssh所需的文件,并在构建映像时将其复制到适当的目录中

    如果您想在以后保存一些输入,我强烈建议您也修改jupyter配置文件

    我假设你在主机上运行linux。你必须创建一个docker网络。您应该只需要--attacable选项。我喜欢在我的/etc/host中有一个条目,以使生活更轻松,例如:

    172.21.0.2  container-1 container-1
    

    您还必须修改您的/home/

    Host container-1
        Hostname container-1
        IdentityFile ~/.ssh/containers_rsa
        User root
    
    Host tunnel-container-1
        Hostname container-1
        IdentityFile ~/.ssh/containers_rsa
        User root
        LocalForward 8888 localhost:8888
        LocalForward 8000 localhost:8000
    

    你难道不厌倦必须键入nvidia docker
    下面是一个示例/etc/docker/daemon。json

      {
        "runtimes": {
            "nvidia": {
                "path": "nvidia-container-runtime",
                "runtimeArgs": []
            }
        },
        "graph":"/docker-files"
      }
    

    你快到了。您需要能够建立到远程系统的ssh隧道。示例~/。本地系统的ssh/config

    Host remote_host
        Hostname remote_host
        IdentityFile ~/.ssh/remote_host/remote_rsa
    
    Host tunnel-remote_host
        Hostname remote_host
        IdentityFile ~/.ssh/remote_host/remote_rsa
        LocalForward 10000 localhost:8888
        LocalForward 10006 localhost:8000
    

    一个重要的音符。我在我的本地/etc/host中有一个远程主机的条目。您的实例可能没有静态ip。因此,您可以在每次启动实例时修改本地/etc/host,或者使用所有正确的LocalForward指令将脚本sshing到远程系统。

    假设您的远程实例已成功启动且Docker正在正确运行。此外,它假设您已经完成了我提到的方便步骤。

    1. SSH远程。
    2. 启动docker容器。请注意容器名称,或者更好地指定它。
    3. 连接你的容器到你的网络.例如docker网络连接skynet容器-1.您可以通过运行docker网络检查skynet来检查您的容器是否已附加。请注意,您的网络很可能会被命名为其他东西,然后skynet
    4. SSH你的docker容器,例如ssh容器-1.
    5. 启动您的juypyter服务器

    如果一切正常,您应该连接到您的jupyter服务器,并在您在Dockerfile中指定的根目录中!

    首先,确认您可以使用正确的运行时环境手动启动docker容器。确认您可以ssh并启动jupyter笔记本。是的,您将无法连接到它,但您将知道所有这些部件都在工作。接下来确认您可以使用容器从远程到容器建立ssh隧道。通过使用wget获取jupyter服务器登录页的html,可以确认隧道是否正常工作。接下来检查从本地到远程/主机的转发。我花了一些时间尝试了一个错误,以获得LocalForward指令的正确顺序。

    我希望这能有所帮助。

  •  类似资料:
    • 我在建立从本地计算机到我在docker容器中的远程服务器上运行的jupyter笔记本实例的连接时遇到问题。 到目前为止我所做的: 我使用 我运行以确保我的容器尚未运行 现在我用

    • 在WSL 2上,远程访问运行在docker容器中的jupyter笔记本是否有一般方法? 仅供参考,WSL2(Ubuntu 20.04)是按照以下说明安装的: https://ubuntu.com/blog/getting-started-with-cuda-on-ubuntu-on-wsl-2

    • 问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow的主题。 2年前关闭。 改善这个问题 我想在我可以访问的计算机上运行服务器,并且已经能够在本地运行笔记本计算机。 如何设置以便可以 远程 访问? 问题答案: 如果您具有ssh访问将运行服务器的计算机的权限,请执行以下步骤: 1)在将运行 服务器 的机器上,执行: 2)

    • 我按照官方指示在Ubuntu 16.04上安装了docker,并成功地将注册表作为容器运行。我想远程连接到另一个容器,所以我尝试: 我得到一个错误: 连接过程中出错:Posthttp://1.2.3.4:2375/v1.29/containers/19f36d1bdfaf/exec: 拨打tcp 1.2.3.4:2375:connectex:无法建立连接,因为目标计算机主动拒绝连接。 为什么会出现

    • 我想创建一个ssh隧道,从我的计算机到远程服务器,再到运行Jupyter Notebook(计算机)的docker容器 Docker容器托管在运行OS X(El Capitan)的机器上。Docker正在使用默认的机器IP:192.168.99.100。 我可以坐在运行Docker容器的服务器上,使用浏览器(192.168.99.100:8888)从Docker容器创建Jupyter笔记本。这将验

    • 在使用macOS Mojave的本地机器中,我安装了一个虚拟环境,其中包含Python 3.6、opencv包和一些其他不相关的包。 我开始了一个非常简单的Jupyter笔记本,执行没有问题,这是代码: 现在,我正试图在远程Ubuntu机器上的Jupyter笔记本中执行相同的代码,但我无法使其工作。以下是我采取的步骤: 我将图像文件和笔记本ypnb文件复制到远程ubuntu机器上 我打开了一个ss