首页 > 解决方案 > 如何将 NFS 共享挂载到 JupyterHub 中的衍生容器?

问题描述

我正在尝试在 DockerSwarm 上配置 JupyterHub 服务器。我无法将 NFS 文件夹直接挂载到 JupyterHub 服务生成的容器中。

我尝试使用 docker-compose 将它挂载到 JupyterHub 服务,然后将其挂载到本地挂载的文件夹到生成的容器并且它可以工作,但是现在我们在此服务上遇到了瓶颈,因为每次容器需要处理文件时,它首先会转到 JupyterHub服务,然后到 NFS 共享。我想让它从生成的容器直接进入 NFS 共享,但这似乎不是一件容易的事。

要将 nfs 正确安装到容器,我使用了 jupyterhub_config.py 中的下一个代码

mounts = [
    {
        'type': 'volume',
        'target': USER_WORKDIR,
        'source': 'jhub-user-{username}',
        'driver_config': {
            'name': 'local',
            'options': {
                'type': 'nfs',
                'o': NFS_IP + ',rw',
                'device': ':/opt/nfs/share'
            }
        }
    }
]

c.SwarmSpawner.extra_container_spec = {'mounts': mounts}

在这种情况下,我可以登录到容器,但不会创建用户的卷。

我尝试的另一种方法是将此代码放入pre_spawn_hook,使其看起来像这样

def pre_spawn_hook(spawner):
    username = spawner.user.name

    mounts = [
        {
            'type': 'volume',
            'target': USER_WORKDIR,
            'source': 'jhub-user-{username}',
            'driver_config': {
                'name': 'local',
                'options': {
                    'type': 'nfs',
                    'o': NFS_IP + ',rw',
                    'device': ':/opt/nfs/share'
                }
            }
        }
    ]

    spawner.extra_container_spec = {'mounts': mounts}

c.SwarmSpawner.pre_spawn_hook = pre_spawn_hook

在这种情况下,它会在登录时为每个用户创建自己的卷,但这些卷由于某种原因无权访问 NFS 文件夹。

此外,仅对exec生成的容器和运行mount命令不起作用。

谢谢。

标签: pythondockerjupyter-notebookdocker-swarmjupyterhub

解决方案


推荐阅读