84 votes

Accéder au carnet de notes Jupyter fonctionnant sur un conteneur Docker

J'ai créé une image docker avec les bibliothèques python et Jupyter. Je démarre le conteneur avec l'option -p 8888:8888 pour relier les ports entre l'hôte et le conteneur. Lorsque je lance un noyau Jupyter à l'intérieur du conteneur, il s'exécute sur localhost:8888 (et ne trouve pas de navigateur). J'ai utilisé la commande jupyter notebook

Mais depuis mon hôte, quelle est l'adresse IP que je dois utiliser pour travailler avec Jupyter dans le navigateur de l'hôte ?

Avec la commande ifconfig je trouve eth0 , docker , wlan0 , lo ...

Merci !

0 votes

Pour lancer le conteneur docker, j'utilise nvidia-docker .

0 votes

Avez-vous vérifié si quelque chose écoute sur localhost:8888 ? Par exemple en utilisant netcat ?

0 votes

J'ai essayé dans un navigateur localhost:8888, mais pas en utilisant netcat

72voto

Mateusz Moneta Points 694

Vous devez faire fonctionner votre ordinateur portable sur 0.0.0.0 : jupyter notebook -i 0.0.0.0 . L'exécution sur localhost le rend disponible uniquement depuis l'intérieur du conteneur.

61 votes

Docker : docker run -it -p 8888:8888 image:version Conteneur : jupyter notebook --ip 0.0.0.0 --no-browser Hôte : localhost:8888/tree

0 votes

@j-guillaumin Merci beaucoup ! Cela fonctionne juste en utilisant la commande jupyter notebook --ip 0.0.0.0 --no-browser au lieu de jupyter notebook.

14 votes

Maintenant vous devez ajouter ce drapeau : --allow-root ! Cela provient d'un problème de sécurité de Jupyter. Ou bien vous pouvez personnaliser le fichier de configuration pour autoriser Root (*.py en ~/.jupyter. )

46voto

Machine hôte : docker run -it -p 8888:8888 image:version

L'intérieur du conteneur : jupyter notebook --ip 0.0.0.0 --no-browser --allow-root

La machine hôte accède à cette url : localhost:8888/tree

Lorsque vous vous connectez pour la première fois, un lien s'affiche sur le terminal pour vous connecter avec un jeton.

5 votes

Si le port 8888 de l'hôte est occupé, nous pouvons utiliser d'autres ports, par exemple 8899. Machine hôte : docker run -it -p 8899:8888 image:version La machine hôte accède à cette url : localhost:8899/tree

0 votes

Le laboratoire Jupyter fonctionne également comme ceci : jupyter lab --ip 0.0.0.0 --no-browser --allow-Root

10voto

Josephine M. Ho Points 89

Pour obtenir le lien vers votre serveur Jupyter notebook :

Après votre docker run un lien hypertexte devrait être généré automatiquement. Il ressemble à quelque chose comme ceci : http://localhost:8888/?token=f3a8354eb82c92f5a12399fe1835bf8f31275f917928c8d2 :: /home/jovyan/work

Si vous voulez obtenir le lien à nouveau plus tard, vous pouvez taper docker exec -it <docker_container_name> jupyter notebook list .

0 votes

jupyter notebook list ne fonctionne pas en raison de ce problème :(

0 votes

Oh ! Pour l'IP, vous pouvez utiliser la commande hostname -I pour obtenir l'IP de votre serveur distant (si vous utilisez un hôte distant). Remplacez ensuite "localhost" dans l'URL par l'IP.

0 votes

Si vous spécifiez -it à votre première docker run et que vous l'exécutez à partir de PyCharm Professional, vous pouvez simplement cliquer sur le lien dans l'écran d'accueil. Attached Console fenêtre. Si vous l'exécutez simplement à partir de l'interpréteur de commandes, ce dernier peut ou non vous permettre de cliquer sur le lien.

2voto

Hemant jajoo Points 21

Vous pouvez utiliser la commande jupyter notebook --allow-root --ip[of your container] ou donner accès à tous les ip en utilisant l'option --ip0.0.0.0 .

0voto

abng88 Points 11

Regardez le projet Torus qui Manifold récemment mis en libre accès. Nous voulions un moyen facile pour nos ingénieurs ML de se lancer dans de nouveaux projets avec un environnement de développement cohérent pour toute l'équipe. Ce cookiecutter Python va échafauder pour vous une nouvelle structure de projet qui comprend un Dockerfile qui utilise une image de développement ML pré-cuite que nous avons placée dans Docker Hub et une configuration Docker Compose qui s'occupe de tous les transferts de ports pour vous. La configuration est écrite de manière à choisir un port ouvert sur votre machine hôte pour le transférer au serveur notebook fonctionnant sur 8888 dans le conteneur. Vous n'aurez plus à vous soucier de l'exécution de plusieurs serveurs notebook sur votre machine ! Jetez-y un coup d'oeil en espérant que cela vous sera utile !

Dépôt Github : https://github.com/manifoldai/docker-cookiecutter-data-science

Pourquoi nous l'avons construit (avec démo) : https://medium.com/manifold-ai/torus-a-toolkit-for-docker-first-data-science-bddcb4c97b52

2 votes

Veuillez ajouter une clause de non-responsabilité plus explicite. Vous devez divulguer votre affiliation dans le message lorsque vous créez un lien vers vos propres produits ou projets. Dans le cas contraire, vos messages peuvent être traités comme de l'"astro-turfing" ou du spam. Voir stackoverflow.com/help/promotion

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X