问题描述
我开始使用jupyterhub,现在我正在与错误做斗争,希望您能有所帮助。 我有一个有效的jupyterhub配置:
import environ
import simplespawner
import tmpauthenticator
ROOT_DIR = environ.Path(__file__) - 2
env = environ.Env()
env.read_env(str(ROOT_DIR.path(".env")))
c.JupyterHub.port = 8008
c.JupyterHub.authenticator_class = tmpauthenticator.TmpAuthenticator
c.JupyterHub.spawner_class = simplespawner.SimpleLocalProcessspawner
c.Spawner.notebook_dir = NOTEBOOK_DIR
没关系,但是现在我想将SimpleLocalProcessspawner更改为DockerSpawner。我跑了
docker pull jupyterhub/singleuser
并将以上配置更改为:
....
c.JupyterHub.spawner_class = dockerspawner.DockerSpawner
c.DockerSpawner.image = 'jupyterhub/singleuser:latest'
docker0 = netifaces.ifaddresses('docker0')
docker0_ipv4 = docker0[netifaces.AF_INET][0]
c.JupyterHub.hub_ip = docker0_ipv4['addr']
现在我最终会遇到错误:
500:Authenticator.pre_spawn_start中的内部服务器错误错误: 提取服务器API版本时发生DockerException错误:(“连接 中止。”,PermissionError(13,“权限被拒绝”)),您可以尝试 从主页重新启动服务器。
你能告诉我我在做什么错吗?
编辑: 写作:
sudo chmod 666 /var/run/docker.sock
允许我在此配置下运行jupyterhub。问题是每次重新启动计算机后都必须运行它。如何使其永久化?
解决方法
此错误可能有多种可能的原因:
-
确保运行 JupyterHub 的用户是
docker
组的成员(使用id
检查)。这很可能是因为将/var/run/docker.sock
的权限设置为 666 可以解决问题。 -
容器必须挂载 Docker 套接字
/var/run/docker.sock
。如果您有一个docker-compose.yml
文件,那么它应该包含相应的volumes
设置,如下所示:volumes: # Give access to Docker socket - /var/run/docker.sock:/var/run/docker.sock
-
其他东西...考虑到 Docker 和 JupyterHub 的复杂性。 :-)