![](/img/trans.png)
[英]Docker container not able to connect with docker container name as hostname
[英]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.