情况:
所以我在网络上的虚拟机中的 Docker 容器内安装了 Jupyter-Lab。然后我做了一个提交(我知道这不是正确的做事方式,我应该使用 Docker 文件)。然后我进入容器 bash 并运行jupyter-lab
它,然后将 URL 输出到 STDOut 以连接到 WebGUI:
http://localhost:8888/
or http://127.0.0.1:8888/
下面是我的设置图:
┌─────────────────────────────┐
│ │
│ VM Container │
│ IP: 192.168.10.223 │ ┌────────────────────┐
│ Docker IP: 172.17.0.1 │ │ │
│ │ My Local 192.168.10.0/24 Network │ My Machine │
│ ┌─────────────────────┐ │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx│ │
│ │ Docker │ │ │ IP: 192.168.10.50 │
│ │ Jupyter-Lab │ │ │ │
│ │ │ │ └────────────────────┘
│ └─────────────────────┘ │
│ │
└─────────────────────────────┘
问题:
我似乎无法连接到 Jupyter WebGui。我尝试了以下命令:
sudo docker run -it --rm -p 8888:8888 -v $(realpath ~/notebooks):/tf/notebooks
sudo docker run -it --rm -p 8888:8888 --expose 8888 -v $(realpath ~/notebooks):/tf/notebooks
sudo docker run -it --rm -p 127.0.0.1:8888:8888 -v $(realpath ~/notebooks):/tf/notebooks
sudo docker run -it --rm -p 8888:8888 --ip 0.0.0.0 -v $(realpath ~/notebooks):/tf/notebooks
而且我似乎无法从我的 192.168.10.50 机器连接到 Jupyter 实例。我已经运行netstat -tulnp
清楚地表明端口 8888 已暴露:
docker_machine@instance:~$ netstat -tulpn
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:45511 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
udp 0 0 127.0.0.53:53 0.0.0.0:* -
这表明它正在侦听任何要连接的地址,所以我不明白。
问题
为什么当我将浏览器指向 192.168.10.223:8888 时无法访问 Jupyter Web 界面?
您的输出
jupyter-lab
表明 jupyter 仅侦听容器内的环回接口。要启用从容器外部的访问,您需要将其绑定到容器的外部接口(或所有接口)。