Greifen Sie auf das Jupyter-Notizbuch zu, das auf dem Docker-Container ausgeführt wird


72

Ich habe ein Docker-Image mit Python-Bibliotheken und Jupyter erstellt. Ich starte den Container mit der Option -p 8888:8888, Ports zwischen Host und Container zu verbinden. Wenn ich einen Jupyter-Kernel im Container starte, läuft er weiter localhost:8888(und findet keinen Browser). Ich habe den Befehl benutztjupyter notebook

Aber von meinem Host aus, welche IP-Adresse muss ich verwenden, um mit Jupyter im Browser des Hosts zu arbeiten?

Mit dem Befehl ifconfig, finde ich eth0, docker, wlan0, lo...

Vielen Dank !


Zum Starten des Docker-Containers verwende ich nvidia-docker.
J. Guillaumin

Haben Sie überprüft, ob auf localhost etwas zuhört: 8888? Zum Beispiel mit Netcat?
Sge

Ich habe versucht, in einem Browser localhost: 8888, aber nicht mit netcat
J. Guillaumin

1
Nun, Sie müssen die Situation debuggen. Überprüfen Sie zunächst, ob Ihr Container tatsächlich ausgeführt wird (starten Sie ohne -d, hängen Sie ihn an oder führen Sie ihn einfach aus docker ps). Zweitens müssen Sie überprüfen, ob Ihr Port tatsächlich an Ihren Host weitergeleitet wird.
Sge

2
Hallo, tut mir leid, ich habe 5 Tage frei genommen. Diese Lösung funktioniert: In den Container: jupyter notebook --ip 0.0.0.0 --no-browserIn einen Browser (ost):localhost:8888/tree
J. Guillaumin

Antworten:


64

Sie müssen Ihr Notebook ausführen auf 0.0.0.0: jupyter notebook -i 0.0.0.0. Wenn Sie auf localhost ausgeführt werden, ist es nur im Container verfügbar.


57
Docker: docker run -it -p 8888:8888 image:version Container: jupyter notebook --ip 0.0.0.0 --no-browser Host:localhost:8888/tree‌​
J. Guillaumin

@ j-guillaumin Vielen Dank! Es funktioniert nur mit dem Befehl jupyter notebook --ip 0.0.0.0 --no-browser anstelle von jupyter notebook.
Nkhuyu

14
Jetzt müssen Sie diese Flagge hinzufügen : --allow-root! Es kommt von einem Sicherheitsproblem von Jupyter. Oder Sie können die Konfigurationsdatei so ~/.jupyter.
anpassen

1
Verwenden Sie --port XXXXmit , jupyterfalls Sie mit einem anderen Port veröffentlichen docker runals die jupyter Standard 8888. Sie enthalten auch müssen --allow-rootmit dem jupyter Anruf.
Kilgoretrout

35

Host-Maschine: docker run -it -p 8888:8888 image:version

Im Container: jupyter notebook --ip 0.0.0.0 --no-browser --allow-root

Host-Computer greifen auf diese URL zu: localhost:8888/tree‌​

Wenn Sie sich zum ersten Mal anmelden, wird auf dem Terminal ein Link angezeigt, über den Sie sich mit einem Token anmelden können.


4
Wenn der Port 8888 des Hosts belegt ist, können wir andere Ports verwenden, z. B. 8899. Hostcomputer docker run -it -p 8899:8888 image:version : localhost:8899/tree‌​
Hostcomputer

19

Der docker runBefehl ist obligatorisch, um einen Port für den Container zu öffnen, damit die Verbindung über einen Host-Browser hergestellt werden kann. Weisen Sie den Port dem Docker-Container mit -p zu. Wählen Sie Ihr Jupyter-Image aus docker images.

docker run -it -p 8888:8888 image:version

Starten Sie im Container das Notizbuch, das den von Ihnen geöffneten Port zuweist:

jupyter notebook --ip 0.0.0.0 --port 8888 --no-browser --allow-root

Greifen Sie über Ihren Desktops-Browser unter http: // localhost: 8888 auf das Notizbuch zu. Das Notizbuch fordert Sie zur Eingabe eines Tokens auf, das beim Erstellen des Notizbuchs generiert wurde.


Wird Bind Mount oder Volumn verwendet? Oder es wird kein Speicher mit dem Host geteilt
Luk Aron

@LukAron Sofern die -vOption für den Docker-Ausführungsbefehl nicht angegeben ist, wird kein Speicher für den Host freigegeben. Um ein Volume für die Freigabe zuzuordnen, -v /path/to/host/source:/container/path/to/srckann so etwas wie verwendet werden. Aber seien Sie vorsichtig, das verbirgt alles, was der Container haben könnte /container/path/to/src.
Hlongmore

Es ist schade, dass der Downvoter keinen Grund angegeben hat, warum; Dies ist fast wörtlich der Befehl, den ich jetzt erfolgreich verwende. Die einzigen Unterschiede bestehen darin, dass ich den vollständigen Pfad zu jupyter spezifiziere und es möglich mache, mithilfe einer Umgebungsvariablen einen anderen Port auszuwählen.
Hlongmore

10

So erhalten Sie den Link zu Ihrem Jupyter-Notebook-Server:

Nach Ihrem docker runBefehl sollte automatisch ein Hyperlink generiert werden. Es sieht ungefähr so ​​aus:http://localhost:8888/?token=f3a8354eb82c92f5a12399fe1835bf8f31275f917928c8d2 :: /home/jovyan/work

Wenn Sie den Link später erneut erhalten möchten, können Sie eingeben docker exec -it <docker_container_name> jupyter notebook list.


jupyter notebook listfunktioniert aufgrund dieses Problems nicht :(
Ciprian Tomoiagă

Oh! Für die IP können Sie den Befehl verwenden hostname -I, um die IP Ihres Remote-Servers abzurufen (wenn Sie einen Remote-Host verwenden). Ersetzen Sie dann "localhost" in der URL durch die IP.
Josephine M. Ho

Wenn Sie -itIhren ursprünglichen docker runBefehl angeben und in PyCharm Professional ausgeführt werden, können Sie einfach auf den Link im Attached ConsoleFenster klicken . Wenn Sie es nur über die Shell ausführen, können Sie in Ihrer Shell möglicherweise auf den Link klicken oder nicht.
Hlongmore

4

Im Folgenden wird beschrieben, wie ich es unter Windows 7 mit der Docker-Toolbox zum Laufen bringe.

Wenn Sie die Docker-Toolbox verwenden, öffnen Sie das Docker-Schnellstartterminal und notieren Sie die IP hier:

docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

Sobald Sie die Docker-Befehle von der Tensorflow-Installationswebsite ausgeführt haben :

docker pull tensorflow/tensorflow                  # Download latest image
docker run -it -p 8888:8888 tensorflow/tensorflow  # Start a Jupyter notebook server

Sie erhalten eine Nachricht wie folgt:

Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
    http://127.0.0.1:8888/?token=d6e80acaf08e09853dc72f6b0f022b8225f94f

Ersetzen Sie auf dem Host 127.0.0.1 durch 192.168.99.100 und verwenden Sie den Rest dieser URL


Funktioniert es, wenn der Jupyter auf Port 5000 ausgeführt werden soll?
Jeffrey Copps

@ Jeffrycopps Ja, Sie müssen nur den Port -p <host port>:<container port>korrekt angeben . Wenn Sie es beispielsweise auf dem Container ausführen möchten 5000, aber hosten möchten 8888, verwenden Sie -p 8888:5000und stellen Sie sicher, dass --expose 5000. Abhängig von Ihrer spezifischen Konfiguration müssen Sie möglicherweise angeben -p 127.0.0.1:8888:5000, um vom Host aus darauf zugreifen zu können. (Mir ist klar, dass es über ein Jahr her ist, seit Sie das gefragt haben, aber ich dachte, ich würde jedem helfen, der die gleiche Frage hat.)
hlongmore

2

Sie können den Befehl verwenden jupyter notebook --allow-root --ip[of your container]oder mit der Option Zugriff auf alle IP-Adressen gewähren --ip0.0.0.0.


0

Im Container können Sie Folgendes ausführen, um es auf Ihrem lokalen Computer verfügbar zu machen (unter Verwendung der IP-Adresse Ihres Docker-Computers).

jupyter notebook --ip 0.0.0.0 --allow-root

Abhängig von der Einrichtung Ihres Containers müssen Sie möglicherweise nicht das Flag --allow-root angeben.


0

Schauen Sie sich das Torus-Projekt an, das Manifold kürzlich als Open-Source- Projekt bereitgestellt hat. Wir wollten unseren ML-Ingenieuren eine einfache Möglichkeit bieten, neue Projekte mit einer konsistenten Entwicklungsumgebung im gesamten Team in Angriff zu nehmen. Dieser Python-Ausstecher erstellt eine neue Projektstruktur für Sie, die eine Docker-Datei enthält, die ein vorgefertigtes ML-Entwicklungsimage verwendet, das wir in Docker Hub eingefügt haben, und eine Docker Compose-Konfiguration, die die gesamte Portweiterleitung für Sie übernimmt. Die Konfiguration wurde geschrieben, um einen offenen Port auf Ihrem Host-Computer auszuwählen und an den Notebook-Server weiterzuleiten, der auf 8888 im Container ausgeführt wird. Kein Problem mehr beim Ausführen mehrerer Notebook-Server auf Ihrem Computer! Probieren Sie es aus, hoffentlich ist dies hilfreich!

Github-Repo: https://github.com/manifoldai/docker-cookiecutter-data-science

Warum wir es gebaut haben (mit Demo): https://medium.com/manifold-ai/torus-a-toolkit-for-docker-first-data-science-bddcb4c97b52


2
Bitte fügen Sie einen expliziteren Haftungsausschluss hinzu. Sie müssen Ihre Zugehörigkeit in der Post offenlegen, wenn Sie auf Ihre eigenen Produkte oder Projekte verlinken. Andernfalls werden Ihre Beiträge möglicherweise als "Astro-Rasen" oder Spam behandelt. Siehe stackoverflow.com/help/promotion
elixenide

0

Alternativ zum Erstellen eines eigenen Docker-Images können Sie auch das ML Workspace- Image verwenden. Der ML Workspace ist eine Open-Source-Web-IDE, die Jupyter, VS Code, eine Desktop-GUI und viele andere Tools und Bibliotheken in einem praktischen Docker-Image kombiniert. Das Bereitstellen einer einzelnen Arbeitsbereichsinstanz ist so einfach wie:

docker run -p 8080:8080 mltooling/ml-workspace:latest

Alle Tools sind über denselben Port zugänglich und in die Jupyter-Benutzeroberfläche integriert. Weitere Dokumentation finden Sie hier .


0

Docker-Lauf -i -t -p 8888: 8888 Continuumio / Anaconda3 / bin / Bash -c "/ opt / conda / bin / conda install jupyter -y --quiet && mkdir / opt / notebooks && / opt / conda / bin / jupyter notebook --notebook-dir = / opt / notebooks --ip = '*' --port = 8888 --no-browser --allow-root "

Ich musste --allow-root zum Befehl hinzufügen und jetzt läuft es

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.