Я пытаюсь настроить сервер JupyterHub на DockerSwarm.Я не могу смонтировать папку 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
, чтобы он выглядел следующим образомthis
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
не работает.
Спасибо.