ssh端口映射-访问本地映射的目标主机映射的Docker容器中的jupyter

背景:

我的电脑是本地主机,同事的电脑(3080TI)是目标主机,系统中有容器,我需要连接目标主机中的容器,需要图形界面或文件夹目录。只使用vscode或SFTP客户端是看不到容器中的文件和图形界面的,于是探索了使用jupyter访问容器中的文件夹。

但现在已经改用VNC方法访问容器的桌面,该文章仅做记录。

(1条消息) vnc连接远程服务器中docker容器的桌面_°能不能换个碗来ぐ的博客-CSDN博客


本地映射至目标主机

新建powershell,运行以下代码,打开终端并将本机的8888端口映射至远程主机的8888端口,使用 ssh 命令的 -L 参数来实现。

 ssh -L 8888:127.0.0.1:8888 [email protected]

 以下是ssh格式。其中,本地地址通常就是本机,可以直接忽略,默认为localhost。两台主机之间的映射需要填目标主机地址,即127.0.0.1。

ssh -L 本地地址:本地端口:目标地址:目标端口 用户名@跳板机地址

在任意终端中检查容器运行状态、启用容器、进入容器。

# 查看当前所有容器:已运行、未运行的
docker container ls -a
# 若容器时up状态,则直接exec进入容器,忽略第一行。
docker start ybd
docker exec -it ybd bash

检查容器是否开启ssh服务。如果上一步容器是up状态,并且ssh状态是已知开启的,则不需要额外运行启动ssh服务的命令。

service ssh start # 启动ssh服务
ps -e | grep ssh #查看ssh服务是否启动

 在第一步打开的终端(完成端口映射)中运行以下代码使用ssh连接容器,并将容器转发至目标主机。由于是本机(目标主机)转发,目标地址和跳板机一致,则目标地址直接填localhost。

# 下面两句含义相同,本机转发,本机地址为127.0.0.1
ssh -L 8888:127.0.0.1:8888 [email protected] -p 8080
ssh -L 8888:localhost:8888 [email protected] -p 8080

连接至容器之后,首先生成配置文件。

$jupyter notebook --generate-config

首次连接需要生成密码,参考远程访问jupyter notebook - Echo/ - 博客园 (cnblogs.com),按照操作生成密码后,需要打开 ~/.jupyter/jupyter_notebook_config.py进行配置:

vim ~/.jupyter/jupyter_notebook_config.py

 添加一下内容。注意将‘sha1:854d1…’替换为上一步生成的密钥。

c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha1:854d183417ac:db1e783bde7bbab704d009c996e93dc2d3e31c25'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888

配置好jupyter配置文件后,运行jupyter:

jupyter notebook --allow-root

出现以下运行结果:

ssh端口映射-访问本地映射的目标主机映射的Docker容器中的jupyter_第1张图片

 打开浏览器,输入localhost:8888即可访问本地主机映射的目标主机映射的docker容器。

ssh端口映射-访问本地映射的目标主机映射的Docker容器中的jupyter_第2张图片

还存在一个问题,可能jupyter的默认路径不是容器挂载到目标主机的路径,因此需要再次再打开jupyter_notebook_config.py修改默认路径。

vim ~/.jupyter/jupyter_notebook_config.py

按"/"查找:“c.NotebookApp.notebook_dir”:

ssh端口映射-访问本地映射的目标主机映射的Docker容器中的jupyter_第3张图片默认为:  

# c.NotebookApp.notebook_dir = ''

按照需要修改为:

c.NotebookApp.notebook_dir = '/'

默认路径修改成功!ssh端口映射-访问本地映射的目标主机映射的Docker容器中的jupyter_第4张图片


 最后!非常重要!

每次退出jupyter都要按正常程序退出,否则端口一直开放,下次容器映射时就无法访问8888,顺延至8889,导致无法正常连接了!

如果意外退出,最有效的方法是重启容器!!!

参考:

Docker: 如何在Docker中优雅地使用jupyter notebook (利器)_Felaim的博客-CSDN博客

SSH 端口转发实现 Jupyter Notebook 远程连接服务器_ID_AF12的博客-CSDN博客_jupyter notebook 端口转发

你可能感兴趣的:(docker,ssh,jupyter,docker,linux)