繁体   English   中英

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

[英]jupyterhub in docker container not able to connect to external directory

我为组中的用户设置了一个jupyterhub,使其能够使用python包对常见数据运行脚本,而无需在其计算机上安装环境。 该系统基于jupyterhub-deploy-docker( https://github.com/jupyterhub/jupyterhub-deploy-docker/ )进行了修改,可以在本地主机( https://github.com/PHI-Toolkit/jupyterhub )上运行-deploy-docker-localhost ),它会从docker化的jupyterhub中使用单用户jupyter Notebook实例生成Docker容器。 这个想法是将本地主机目录(或数据服务器的主机目录)安装到jupyterhub容器中,并从那里馈送给单个用户实例,以用作notebook_dir。 然后,ipynbs可以访问服务器上的数据并将其保存在服务器上。

整个方法在未进行dockerized时效果很好(用于测试,使用DummyAuthenticator进行身份验证以及使用SimpleLocalProcessSpawner生成),但是我无法让docker容器查看主机目录。 我的方法是在主机上另外绑定路径,并将使用的DOCKER_NOTEBOOK_DIR指定为目标。 因此,在docker-compose.yml中,我更改了volumes部分

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_config.py中用作生成器的notebook_dir:

notebook_dir = os.environ.get('DOCKER_NOTEBOOK_DIR') or '/home/jovyan/work'
c.DockerSpawner.notebook_dir = notebook_dir
# c.DockerSpawner.volumes = {
#     'jupyterhub-user-{username}': notebook_dir,
#     'jupyter-shared': '/home/jovyan/work/shared/',
#     'jupyter-geoserver': '/home/jovyan/work/geoserver',
#     'jupyter-modules': '/home/jovyan/work/modules'
#}
c.DockerSpawner.volumes = { 'jupyter-serverdata': notebook_dir,
    'jupyter-shared': '/home/jovyan/work/shared/',
}

我认为,然后,ipython笔记本应该访问/ path / on / host的内容,但是我仍然获得与标准配置相同的目录(即使删除了jupyterhub容器和图像,它们的内容也相同)。 我怀疑这是由于DockerSpawner引起的,我尝试使用SimpleLocalProcessSpawner,但仍在其Docker容器中运行jupyterhub。 但是我无法运行它(生成错误500的结果)。

非常感谢您提供有关如何通过在Docker容器中运行的jupyterhub将外部路径(主机路径)馈送到jupyter笔记本实例的任何帮助。

查看文档和代码通常会有所帮助。 我得到它的工作:

在dockerspawner源代码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"}}

应该使它确实起作用。 希望这对将来的任何人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM