从Docker工具箱容器访问jupyter笔记本时出现问题

时间:2020-03-12 11:15:53

标签: docker jupyter-notebook

我刚刚使用Docker Toolbox设置了一个Docker容器,并使用该容器在容器中运行了jupyter笔记本

docker run --name container -v %somedirectory%:%someotherdir% -d -p 127.0.0.1:8888:8888 quay.io/fenicsproject/stable:2017.2.0 'jupyter-notebook --ip=0.0.0.0'

然后,我可以检查容器的日志以查看URL and token that jupyter notebook created

如果我现在继续并将链接复制到我的浏览器,它将无法连接到本地主机。访问127.0.0.1也不起作用。

由于Docker Toolbox依赖于Virtual Box VM,因此我也尝试使用VM的IP地址,在本例中为192.168.99.100:2376。根据Kitematic UI,这是docker-machine正在发布的IP:Port组合,实际上这不会导致一般的连接错误。而是浏览器的输出是:

Client sent an HTTP request to an HTTPS server.

从那时起我真的不知道该怎么办。这个错误是什么意思?使用虚拟机的IP地址甚至有意义吗?还有最重要的一点:为了最终获得jupyter笔记本的访问权限,我还能做些什么?

PS:我也尝试了在线程Can't access jupyter notebook from dockerAccess Jupyter notebook running on Docker container中提出的建议,但不幸的是,其中的任何一个都无法正常工作。

我希望有人能提供帮助,非常感谢。

1 个答案:

答案 0 :(得分:1)

您需要做两件事才能使这项工作生效:

  1. 删除端口映射的127.0.0.1部分; docker run -p 8888:8888 ...
  2. 使用已发布的端口连接到docker-machine ip地址; http://192.168.99.100:8888

Docker Toolbox在单独的Linux虚拟机中运行Docker。任何docker run -p选项都将从该VM的角度进行解释。如果您docker run -p 127.0.0.1:...,则发布的端口将绑定到VM的lo0本地主机接口,因此无法从VM外部访问。

发布端口后,需要连接到该特定端口。端口2376通常是用于访问VM内部Docker守护程序的端口,具有相互TLS安全性;您仅需要手动docker手动命令使用。要访问在VM中运行的服务,您需要连接到已发布的端口(docker run -p选项中的第一个数字)。