Asignación de puertos ssh: acceda a jupyter en el contenedor Docker asignado localmente al host de destino asignado

fondo:

Mi computadora es el host local y la computadora de mi colega (3080TI) es el host de destino. Hay contenedores en el sistema. Necesito conectarme al contenedor en el host de destino y necesito una interfaz gráfica o un directorio de carpetas. Solo usando vscode o el cliente SFTP no se pueden ver los archivos y la interfaz gráfica en el contenedor, por lo que exploramos el uso de jupyter para acceder a las carpetas en el contenedor.

Pero ahora se ha utilizado el método VNC para acceder al escritorio del contenedor, y este artículo es solo para registros.

(1 mensaje) vnc se conecta al escritorio del contenedor docker en el servidor remoto


Asignar localmente al host de destino

Cree un nuevo powershell, ejecute el siguiente código, abra la terminal y asigne el puerto 8888 de la máquina local al puerto 8888 del host remoto, usando el parámetro -L del comando ssh para lograrlo.

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

 El siguiente es el formato ssh. Entre ellos, la dirección local suele ser la máquina local, que se puede ignorar directamente, y el valor predeterminado es localhost. La asignación entre dos hosts debe completar la dirección del host de destino, que es 127.0.0.1.

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

Verifique el estado de ejecución del contenedor, habilite el contenedor, ingrese el contenedor desde cualquier terminal.

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

Compruebe si el contenedor ha habilitado el servicio ssh. Si el contenedor está en estado activo en el paso anterior y se sabe que el estado ssh está habilitado, no es necesario ejecutar el comando adicionalmente para iniciar el servicio ssh.

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

 Ejecute el siguiente código en la terminal abierta en el primer paso (para completar la asignación de puertos) para usar ssh para conectarse al contenedor y reenviar el contenedor al host de destino. Dado que es reenviado por la máquina local (host de destino) y la dirección de destino es consistente con la máquina de trampolín, la dirección de destino se llena directamente con 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

Después de conectarse al contenedor, primero genere el archivo de configuración.

$jupyter notebook --generate-config

Es necesario generar una contraseña para la primera conexión. Consulte Acceso remoto a jupyter notebook - Echo/ - Blog Garden (cnblogs.com) . Después de generar la contraseña de acuerdo con la operación, debe abrir ~/.jupyter/jupyter_notebook_config. py para la configuración:

vim ~/.jupyter/jupyter_notebook_config.py

 Agrega algo de contenido. Nota para reemplazar 'sha1:854d1...' con la clave generada en el paso anterior.

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

Después de configurar el archivo de configuración de jupyter, ejecute jupyter:

jupyter notebook --allow-root

Aparecen los siguientes resultados:

 Abra un navegador e ingrese localhost:8888 para acceder al contenedor acoplable asignado al host de destino asignado al host local.

También hay un problema, tal vez la ruta predeterminada de jupyter no sea la ruta donde el contenedor está montado en el host de destino, por lo que debe abrir jupyter_notebook_config.py nuevamente para modificar la ruta predeterminada.

vim ~/.jupyter/jupyter_notebook_config.py

Presione "/" para encontrar: "c.NotebookApp.notebook_dir":

El valor predeterminado es:  

# c.NotebookApp.notebook_dir = ''

Modifique según sea necesario para:

c.NotebookApp.notebook_dir = '/'

¡La ruta predeterminada se ha modificado con éxito!


 ¡por fin! ¡Muy importante!

Cada vez que salga de jupyter, debe salir de acuerdo con el procedimiento normal; de lo contrario, el puerto permanecerá abierto y la próxima vez que se mapee el contenedor, no podrá acceder a 8888, que se pospondrá a 8889, lo que resultará en el ¡No se pudo conectar normalmente!

Si se cierra inesperadamente, ¡la forma más eficiente es reiniciar el contenedor! ! !

referencia:

Docker: Cómo usar jupyter notebook elegantemente en Docker (herramienta aguda) - Blog de Felaim - Blog CSDN

El reenvío de puertos SSH realiza la conexión remota de Jupyter Notebook server_ID_AF12's Blog-CSDN Blog_jupyter notebook reenvío de puertos

Supongo que te gusta

Origin blog.csdn.net/weixin_41467446/article/details/125216873
Recomendado
Clasificación