我刚刚使用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 docker和Access Jupyter notebook running on Docker container中提出的建议,但不幸的是,其中的任何一个都无法正常工作。
我希望有人能提供帮助,非常感谢。
答案 0 :(得分:1)
您需要做两件事才能使这项工作生效:
127.0.0.1
部分; docker run -p 8888:8888 ...
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
选项中的第一个数字)。