我的电脑是本地主机,同事的电脑(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
出现以下运行结果:
打开浏览器,输入localhost:8888即可访问本地主机映射的目标主机映射的docker容器。
还存在一个问题,可能jupyter的默认路径不是容器挂载到目标主机的路径,因此需要再次再打开jupyter_notebook_config.py修改默认路径。
vim ~/.jupyter/jupyter_notebook_config.py
按"/"查找:“c.NotebookApp.notebook_dir”:
# c.NotebookApp.notebook_dir = ''
按照需要修改为:
c.NotebookApp.notebook_dir = '/'
Docker: 如何在Docker中优雅地使用jupyter notebook (利器)_Felaim的博客-CSDN博客
SSH 端口转发实现 Jupyter Notebook 远程连接服务器_ID_AF12的博客-CSDN博客_jupyter notebook 端口转发