docker容器中的jupyterhub无法连接到外部目录

2024-06-17 14:42:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我们组中的用户设置一个jupyterhub,以便能够使用python包在公共数据上运行脚本,而不必在他们的计算机上安装环境。 该系统基于jupyterhub deploy docker(https://github.com/jupyterhub/jupyterhub-deploy-docker/),并对运行在本地主机(https://github.com/PHI-Toolkit/jupyterhub-deploy-docker-localhost)上的修改进行了修改,该主机从一个dockerized jupyterhub生成带有单用户jupyter笔记本实例的docker容器。其思想是将本地主机目录(或数据服务器的目录)装入jupyterhub容器中,并从那里将其传递给单用户实例,用作notebook_dir。然后,ipynbs可以访问服务器上的数据并保存在那里。在

整个方法在不停靠(用于测试、使用DummyAuthenticator验证和使用SimpleLocalProcessSpawner生成)时工作良好,但我无法让docker容器查看主机目录。 我的方法是额外绑定主机上的路径,并将使用的DOCKER_NOTEBOOK_DIR指定为目标。 因此,在码头-合成.yml我改变了音量部分

volumes:
  # Bind Docker socket on the host so we can connect to the daemon from
  # within the container
  - "/var/run/docker.sock:/var/run/docker.sock:rw"
  # Bind Docker volume on host for JupyterHub database and cookie secrets
  - "data:${DATA_VOLUME_CONTAINER}"
  - "/path/on/host:${DOCKER_NOTEBOOK_DIR}"

这是在jupyterhub中使用的_配置.py作为产卵者的记事本目录:

^{pr2}$

我认为ipython笔记本应该访问/path/on/host的内容,但是我仍然得到了与标准配置相同的目录(具有相同的内容,尽管我删除了jupyterhub容器和映像)。 由于我怀疑这是由于DockerPawner造成的,所以我尝试使用SimpleLocalProcessSpawner,但仍在其docker容器中运行jupyterhub。但是我不能让它运行(产生错误500)。在

对于如何通过运行在docker容器中的jupyterhub向jupyter笔记本实例提供外部路径(主机路径)的任何帮助,我们将不胜感激。在


Tags: the实例dockerhttps路径github目录com
1条回答
网友
1楼 · 发布于 2024-06-17 14:42:58

查看文档和代码通常会有所帮助。我开始工作了:

在DockerPawner源代码中 https://github.com/jupyterhub/dockerspawner/blob/master/dockerspawner/dockerspawner.py#L218 将主机文件/目录装载到容器中的选项(但是描述不够详细,我无法理解如何安装)。为此,测试很有帮助: https://github.com/jupyterhub/dockerspawner/blob/3906f4bebc92b383c73fb8d06c58a7c57003939a/tests/volumes_test.py#L25 建议指定

notebook_mount_dir = '/path/on/host'
notebook_dir = '/path/in/dockerinstance'
c.DockerSpawner.volumes = {notebook_mount_dir: {"bind": notebook_dir, "mode": "rw"}}

应该让它发挥作用,而且确实如此。 希望这对将来的任何人都有帮助。在

相关问题 更多 >