arrière-plan:
Mon ordinateur est l'hôte local et l'ordinateur de mon collègue (3080TI) est l'hôte cible. Il existe des conteneurs dans le système. Je dois me connecter au conteneur de l'hôte cible et j'ai besoin d'une interface graphique ou d'un répertoire de dossiers. Seule l'utilisation de vscode ou du client SFTP ne peut pas voir les fichiers et l'interface graphique dans le conteneur, nous avons donc exploré l'utilisation de jupyter pour accéder aux dossiers du conteneur.
Mais maintenant, la méthode VNC a été utilisée pour accéder au bureau du conteneur, et cet article ne concerne que les enregistrements.
(1 message) vnc se connecte au bureau du conteneur docker sur le serveur distant
Mapper localement sur l'hôte cible
Créez un nouveau powershell, exécutez le code suivant, ouvrez le terminal et mappez le port 8888 de la machine locale au port 8888 de l'hôte distant, en utilisant le paramètre -L de la commande ssh à réaliser.
ssh -L 8888:127.0.0.1:8888 [email protected]
Voici le format ssh. Parmi eux, l'adresse locale est généralement la machine locale, qui peut être ignorée directement, et la valeur par défaut est localhost. Le mappage entre deux hôtes doit renseigner l'adresse de l'hôte cible, qui est 127.0.0.1.
ssh -L 本地地址:本地端口:目标地址:目标端口 用户名@跳板机地址
Vérifiez l'état d'exécution du conteneur, activez le conteneur, entrez le conteneur à partir de n'importe quel terminal.
# 查看当前所有容器:已运行、未运行的
docker container ls -a
# 若容器时up状态,则直接exec进入容器,忽略第一行。
docker start ybd
docker exec -it ybd bash
Vérifiez si le conteneur a activé le service ssh. Si le conteneur est à l'état actif à l'étape précédente et que l'état ssh est activé, il n'est pas nécessaire d'exécuter en plus la commande pour démarrer le service ssh.
service ssh start # 启动ssh服务
ps -e | grep ssh #查看ssh服务是否启动
Exécutez le code suivant dans le terminal ouvert à la première étape (pour terminer le mappage de port) pour utiliser ssh pour vous connecter au conteneur et transférer le conteneur vers l'hôte cible. Puisqu'il est transmis par la machine locale (hôte cible) et que l'adresse cible est cohérente avec la machine tremplin, l'adresse cible est directement remplie avec 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
Après vous être connecté au conteneur, générez d'abord le fichier de configuration.
$jupyter notebook --generate-config
Un mot de passe doit être généré pour la première connexion. Reportez-vous à Remote access to jupyter notebook - Echo/ - Blog Garden (cnblogs.com) . Après avoir généré un mot de passe en fonction de l'opération, vous devez ouvrir ~/.jupyter/jupyter_notebook_config. py pour la configuration :
vim ~/.jupyter/jupyter_notebook_config.py
Ajoutez du contenu. Remarque pour remplacer 'sha1:854d1...' par la clé générée à l'étape précédente.
c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha1:854d183417ac:db1e783bde7bbab704d009c996e93dc2d3e31c25'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888
Après avoir configuré le fichier de configuration jupyter, exécutez jupyter :
jupyter notebook --allow-root
Les résultats suivants apparaissent :
Ouvrez un navigateur et entrez localhost:8888 pour accéder au conteneur docker mappé à l'hôte cible mappé à l'hôte local.
Il y a aussi un problème, peut-être que le chemin par défaut de jupyter n'est pas le chemin où le conteneur est monté sur l'hôte cible, vous devez donc ouvrir à nouveau jupyter_notebook_config.py pour modifier le chemin par défaut.
vim ~/.jupyter/jupyter_notebook_config.py
Appuyez sur "/" pour trouver : "c.NotebookApp.notebook_dir":
La valeur par défaut est :
# c.NotebookApp.notebook_dir = ''
Modifiez au besoin pour :
c.NotebookApp.notebook_dir = '/'
Le chemin par défaut a été modifié avec succès !