Wie verbinde ich PyCharm mit einem Python-Interpreter in einem Docker-Container?
Ich fange mit Docker, aber ich weiß nicht, wie zu konfigurieren, PyCharm, verwenden Sie ein python-interpreter befindet sich in einem container.
Es war einfach zu setup mit Vagrant, aber es gibt anscheinend keine offizielle Möglichkeit, es zu tun mit Docker noch.
Sollte ich mich vorbereiten, spezielle Docker image mit freiliegenden ssh-port? Wie das geht leichter?
Kommentar zu dem Problem
SSH-innen Docker-Container ist als eine schlechte Praxis, aber bisher kann ich nicht kommen mit eine bessere Lösung...
Sie haben Probleme auf Ihrer issue-tracker für die es jetzt: youtrack.jetbrains.com/issue/PY-15476
InformationsquelleAutor der Frage trikoder_beta | 2014-12-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE: PyCharm 2017.1 hat eine Lösung für dieses problem finden Sie in diesem Blogeintrag
Hier ist, wie ich das problem gelöst. Meine Umstände sind, dass ich zugewiesen wurde, um eine intervention auf einen bestimmten Bereich einer web-app, die verwendet docker-verfassen-erstellen Sie eine Gruppe von vier Behältern. Docker-Komponieren ist eine Art meta-Andockfenster, die Verwaltung mehrerer docker-Container von einem Befehl. Ich wollte nicht zu zerfleischen, Ihre bestehenden setup, da sich so viele Dinge davon abhängen. Aber da war ich arbeiten auf einem bestimmten Teil in einem der Bilder, habe ich beschlossen, dass ich verlängern würde einen der Behälter mit ssh und so konnte ich Debuggen von PyCharm. Weiter wollte ich die app normal laufen, wenn Sie gestartet werden und nur durch zwingen, es zu beenden und dann die Verbindung zu es von PyCharm hätte ich eine debug-Version einer Komponente. Hier ist, was ich habe auf meinem mac verwendet boot2docker (auf VirtualBox), um das setup-Andockfenster richtig.
Zuerst habe ich verlängern müssen, die Ziel-container, genannt
jqworker
. Bin ich dabei zu verwenden"supervisior"
zu tun, die schwere Arbeit der Verwaltung in Sachen.Supervisor ermöglicht es mir, führen Sie mehrere Aufgaben von einem Befehl, in diesem Fall den ursprünglichen Befehl und SSHD. Ja, jeder sagt, dass die SSHD im Andockfenster böse und Behälter sollten dies und das und bla bla, aber die Programmierung ist über die Lösung von Problemen, die nicht gemäß beliebige Aussagen, ignorieren Kontext. Wir brauchen SSH-code zu Debuggen und nicht die Bereitstellung dieser zu dem Feld, das ist ein Grund, warum wir erweitern den vorhandenen container anstatt diese in den deployment-Struktur. Bei mir läuft es lokal, so dass ich Debuggen kann der code im Kontext.
Hier ist der supervisord.conf-Datei, Hinweis, dass ich mit dem supervisor-stdout-Paket zur direkten Ausgabe an den Betreuer anstelle der Protokollierung der Daten, da sehe ich lieber alles an einem Ort:
Habe ich ein build-Verzeichnis, in dem die beiden oben genannten Dateien, und vom terminal, dort Baue ich die
Dockerfile
mit:Dieser fügt es so, dass ich es aufrufen
docker
oderdocker-compose
. Überspringen Sie nicht den Punkt am Ende!Da die app verwendet
docker-compose
eine Reihe von Containern, die bestehendenWORKER
container werden ersetzt durch eine, die meine Probleme löst. Aber zunächst möchte ich zeigen, dass in einem anderen Teil meinesdocker-compose.yml
ich definieren ein mapping von den Containern auf meiner lokalen Festplatte, dies ist eine eine Reihe von Volumen zugeordnet wird:Dann die eigentliche definition für meine container, der auf die oben
VOLUMES
:Diese Karten den SSH-port auf einen bekannten port in der VM, daran erinnern, dass ich bin mit
boot2docker
die Fahrten auf der VirtualBox, aber das muss abgebildet werden, zu denen PyCharm es bekommen können. In der VirtualBox öffnen Sie dieboot2docker
VM und wählen SieAdapter 1
. Manchmal ist die "an:" - combo hebt die Auswahl selbst, also achten Sie auf, dass. In meinem Fall sollte esNAT
ausgewählt.Klicken Sie auf "Port-Weiterleitung" und ordnen Sie den inneren Hafen, der einen port auf localhost, wähle ich den gleichen port verwenden. Es sollte so etwas wie, Name:
ssh_mapped
; Protokoll:TCP
; Host-IP:127.0.0.1
; Host Port:7722
; Gast-IP:; Gast-Port:7722
. Hinweis: seien Sie vorsichtig, nicht zu ändern, die boot2docker " ssh " - Einstellung, oder Sie werden schließlich nicht in der Lage zu starten Sie die VM richtig.So, in diesem Punkt haben wir einen container, erstreckt sich mein Ziel-container. Es läuft ssh auf port 22 und ordnet Sie 7722 da andere Behälter verwenden könnte, 22, und ist sichtbar in der VirtualBox-Umgebung. VirtualBox Karten 7722, 7722, um die localhost, und Sie können ssh in den Behälter mit:
Die dann prompt für das Passwort "soup4nuts', und Sie sollten in der Lage sein, suchen Sie etwas bestimmtes für Ihre container, um zu überprüfen, dass es richtig ist und dass alles funktioniert OK. Ich würde nicht Durcheinander mit root, wenn ich die Bereitstellung dieses irgendwo, aber meine lokale Maschine, also sei gewarnt. Dies ist nur für die Fehlersuche vor Ort und Sie denken sollten, zweimal oder dreimal über das tun dies auf einer live-site.
Zu diesem Zeitpunkt können Sie wahrscheinlich herausfinden der rest es aus, wenn Sie verwendet haben, PyCharm ist das remote-debugging. Aber hier ist, wie ich es einrichten:
Erste, daran erinnern, dass ich
docker-compose.yml
Zuordnung der Projekt-Verzeichnis:In meinem container
/opt/applications/myproject
ist eigentlich/Users/me/source/myproject
auf meiner lokalen Festplatte. Also, das ist die root von meinem Projekt. Meine PyCharm sieht das Verzeichnis wie die Projekt-root, und ich möchte PyCharm zu schreiben, die.pycharm_helpers
hier, so dass es weiterhin zwischen den Sitzungen. Ich bin die Verwaltung von source-code auf der mac-Seite der Dinge, aber PyCharm denkt, es ist ein unixy box anderswo. Ja, es ist ein bisschen Durcheinander, bis JetBrains beinhaltet ein Andockfenster Lösung.Zuerst gehen Sie auf die Project X/Projekt-Struktur und erstellen ein Content-Root von der lokalen Zuordnung, in meinem Fall heißt
/Users/me/source/myproject
Später, kommen Sie zurück und fügen Sie
.pycharm_helpers
den ausgegrenzten gesetzt, das wollen wir nicht, um am Ende in die source-control oder verwirren PyCharm.Gehen um die zu Bauen, Ausführung, Registerkarte "Bereitstellung" pick-Bereitstellung und erstellen Sie eine neue Implementierung von SFTP-Typ. Der host ist localhost, der port 7722, der root-Pfad ist
/opt/applications/myproject
und der Benutzername istroot
und Passwort istsoup4nuts
und ich habe die option, um das Passwort zu speichern. Ich nannte meinen Bereitstellung 'dockercompose", so dass ich in der Lage sein zu Holen es später.Auf die Bereitstellung von Mappings habe ich den lokalen Pfad zu
/Users/me/source/myproject
- und Weitergabe und web-Pfad zu einer einzelnen '/', aber da mein code nicht entsprechen, eine URL und ich glaube nicht, verwenden Sie diese zu Debuggen, es ist ein Platzhalter in die Web-Pfad-Einstellung. Ich weiß nicht, wie Sie könnte Ihnen.Auf dem Project X/Projekt-Interpreter Registerkarte, erstellen Sie eine neue Remote-Python-Interpreter. Sie können wählen Sie die Deployment-Konfiguration und wählen Sie die "dockercompose' Konfiguration, die wir weiter oben erstellt haben. Die host-URL sollten füllen Sie als 'ssh://root@localhost:7722" und der Python-Interpreter-Pfad wird wahrscheinlich
/usr/bin/python
. Wir müssen die PyCharm Helfer Pfad als Standard wird nicht überleben, der container wird erneuert. Ich ging auf mein Projekt lokale Verzeichnis und erstellt eine.pycharm_helpers
Verzeichnis in der Wurzel, dann den Pfad hier als/opt/applications/myproject/.pycharm_helpers
und wenn ich drücken Sie die OK-Taste, es kopiert die Dateien "bis" zu dem Verzeichnis. Ich weiß nicht, ob Sie es schaffen wird, es automatisch ist oder nicht.Vergessen Sie nicht, dass die
.pycharm_helpers
Verzeichnis sollte wohl ausgeschlossen werden auf der Projekt-Wurzeln tab.An dieser Stelle können Sie gehen, um den Bau, Ausführung, Registerkarte Bereitstellung, und unter Konsole/Python-Konsole, wählen Sie die remote-interpreter, die wir weiter oben erstellt haben, und legen Sie das Arbeitsverzeichnis auf
/opt/applications/myproject
und starten Sie Ihre Python-Konsole im container, wenn Sie mögen.Nun benötigen Sie eine Runtime-Konfiguration, so dass Sie Remote Debuggen von python-code. Stellen Sie eine neue Python-Konfiguration und legen Sie das Skript, um die eine, die verwendet, um starten Sie den python-code in den container. Mine, aus der supervisor-setup, oben:
Also habe ich das Skript
/opt/applications/myproject/worker.py
und die Parameter zu-A args
.Wählen Sie die remote-interpreter, die wir weiter oben erstellt haben, und als Arbeitsverzeichnis benötigt, ist es für mich
/opt/applications/myproject
und für mich, dass der job nicht.Nun ich will in meinem container und stoppen Sie die worker.py script, so kann ich starten Sie eine debug-version. Natürlich, wenn Sie möchten, können Sie ignorieren, läuft das Skript default und nur den container für die Fehlersuche.
Konnte ich öffnen Sie eine ssh-Sitzung beenden Sie das Skript, aber Andockfenster bietet einen nützlichen Befehl, der die Arbeit für mich, indem Sie es in die Umwelt.
Als mein Prozess wird als 'Arbeiter'. Beachten Sie, dass Sie neu starten können, durch den Austausch der
stop
Befehl mitstart
.Nun, in PyCharm starten Sie eine debug-Sitzung mit der Konfiguration Auszuführen, die oben erstellt. Es sollte die Verbindung und starten Sie die Dinge auf und geben Sie die Ausgabe der Konsole in das Fenster. Da wir töteten die, die Betreuung ursprünglich begonnen, es ist nicht mehr verbunden.
Diese war Sitz der Hose Betrieb, so kann es werden Fehler und falsche Annahmen, die ich nicht bemerkt haben. Besonders die PyCharm-setup benötigt ein paar Iterationen, so ist die Reihenfolge falsch sein können, versuchen, durch Sie gehen wieder, wenn es fehlschlägt. Das ist eine Menge Zeug und einfach zu überspringen etwas Kritischer.
InformationsquelleAutor der Antwort Fran K.
Es ist noch nicht hier, aber in Kürze sollte dies kein problem mehr sein, da
Quelle: http://blog.jetbrains.com/pycharm/2015/03/feature-spotlight-python-remote-development-with-pycharm/#comment-187772
InformationsquelleAutor der Antwort noisy
Um zu vermeiden, dass alle SSH-overhead (der absolut Sinn macht, mit Docker),
docker exec
jeden Fall scheint der Weg zu gehen.Leider konnte ich es nicht zu funktionieren so weit. Es wäre toll, wenn jemand könnte in die Leerstellen zu füllen. Hier ist, was ich getan habe (mit PyCharm 4.0.4 und Andockfenster 1.4.1):
Erstellen Sie eine Datei namens
python_myproject.sh
mit den folgenden:Beachten Sie, dass der name der Datei beginnt mit
python
sonst PyCharm beschweren.In PyCharm Einstellungen, unter
Project Interpreter
fügen Sie einen neuen lokalen interpreter. Geben Sie den Pfad zu Ihrempython_myproject.sh
Datei.Dies ist, wo ich stecken geblieben bin. Nach einer Recht langen Ladezeit (die pulsierendes sagt "Einrichtung Bibliothek-Dateien"), ein Fenster mit dem Titel "Invalid Python-SDK" erscheint und sagt:
In
~/.PyCharm40/system/log/.idea
:InformationsquelleAutor der Antwort Anto
Ich glaube nicht, dass es so schlecht um den SSH in Ihrem container, wenn Sie es wirklich brauchen. Ja, es ist nicht wichtig, in anderen Fällen verwenden, da die Einführung von
docker exec
aber da Intellij/PyCharm nur Unterstützung von remote-interpreter über SSH, es ist OK.Können Sie
phusion/baseimage
als ein guter Ausgangspunkt, bauen Sie Ihre eigenen container mit SSH und jede version von Python geben, die Sie brauchen (es kommt standardmäßig mit PY3).Theoretisch wäre es ideal, um mit Vagrant für diese Aufgabe so gut, da es ermöglicht Ihnen das erstellen Sie einen workflow, der funktioniert sowohl auf Windows/OS X-Maschinen (mit boot2docker) und Linux (native Docker).
Praktisch ich war nicht in der Lage, damit es funktioniert auf OS X, weil die double-NAT-Ebene, die Sie zu Durchlaufen haben, um sich in der SSH-Dienst, und wie es aussieht ist es nicht möglich, zusätzliche Schnittstelle, um die Wandernden boot2docker box (Landstreicher 1.7.2).
InformationsquelleAutor der Antwort m1keil
Wenn alles, was Sie brauchen, ist zum Debuggen von code, die gestartet wird, innerhalb docker-container, den Sie verwenden konnten, pycharm ist python-debug-server Funktion. Für mich ist es weniger mühsam Weg als der Zugriff auf remote-interpreter via SSH. Nachteil dieser Lösung ist, dass für die auto-vervollständigen-und alle diese Art von Sachen, die Sie haben sollten lokale Kopie des Containers Dolmetscher und markieren Sie Sie als Projekt-interpreter (arbeitet für die auto-complete, aber ich bin mir nicht sicher, dass es möglich ist, den debug-code aus third-party-libs in diesem Fall) oder container-interpreter Dateien sichtbar zu pycharm (nicht getestet). Beachten Sie auch, dass Python-debug-server wird feature der Professional edition.
Was Sie tun sollten, für das Debuggen via Python-debug-server:
1) stellen Sie sicher, dass das Verzeichnis mit Ihrem Projekt Hinzugefügt wird in container. Es könnte so Aussehen wie diese Zeile im Dockerfile:
2) kopieren
pycharm-debug.egg
(pycharm-debug-py3k.egg
für Python ist3) aus dem Verzeichnis, wo pycharm ist installiert auf Ihrem host-zu-Verzeichnis im container, die in container PYTHONPATH.Pfad zu pycharm-debug.ei-Entwickler für die Gastgeber sein könnte:
/Applications/PyCharm.app/Contents/pycharm-debug.egg
/opt/pycharm/pycharm-debug.egg
3) erstellen Sie Run/Debug-Konfiguration für das starten von Python-debug-server auf dem host, wie hier beschrieben
To configure a remote debug server
Abschnitt docs. Port ist eine beliebige host-port Ihrer Wahl, aber die IP ist die Adresse, unter der der host ist erreichbar von container. Es könnte sein,:ifconfig
ist es für mich:Auch, vergessen Sie nicht, geben Sie Pfad-mappings zwischen Projekt-Pfad im developer ' s host-und Projekt-Pfad im container.
Dieser blog-post könnte auch sein hilfreich für den aktuellen Schritt
4) starten Sie die erstellte Konfiguration (zum Beispiel über
Debug
- Taste, rechts vonRun
)5) erstellen von python-Skripts, die starten Sie Ihr Projekt und fügen Sie folgenden code für debug-Initialisierung als erste Zeilen in diesem Skript. (stellen Sie sicher, dass
pycharm-debug.egg
im PYTHONPATH, oder dieser code konnte nichtimport pydevd
):6) Schließlich könnten Sie Haltepunkte festlegen und starten Sie Ihre Anwendung vom host, in container per Skript erstellen. Zum Beispiel:
docker-compose run 'container_name' python 'script_name' 'args'
Auf start, Ihre Start-Skript wird eine Verbindung zu Python-debug-server, der läuft auf dem host und stoppen an Haltepunkten. Debugger-features wie gewohnt erreichbar.
InformationsquelleAutor der Antwort 3ka5_cat
- Spezifischen Schritte zu PyCharm Professional Edition 2017.2(allerdings können Sie gemeinsam mit PyCharm CE)
Hier sind ein paar Schritte, die ich nahm, um mein setup zu arbeiten
Schritt 1: Umgebung
Wenige Annahmen an die Struktur von Ihr (oder jemand, der sein könnte, die dies Lesen) Projekt:
bleh
als mein Projekt name nur als Beispiel./Users/myfunkyusername/Projects/bleh
.api
service, wie gezeigt, später in derdocker-compose.yml
DateiHinweis Wir gehen auch davon ausgehen, dass eine Inhalt Ihrer
api
's eine und nurDockerfile
ist als solcheHinweis Wir gehen davon aus, Ihre einzige
docker-compose.yml
hat diese InhalteSchritt 2: Erstellen Von Docker-Maschine
Erstellen von docker-Maschine speziell für die
bleh
ProjektSchritt 3: verbinden Sie remote-interpreter
PyCharm
/Preferences
/Build, Execution, Deployment
/Docker
klicken Sie auf+
Docker machine
radio-button und markieren Siebleh
's docker-Maschine in der pull-down -Apply
PyCharm
/Preferences
/Project:bleh
/Project Interpreter
Project Interpreter
- Feld und wählen SieAdd Remote
Docker
radio-buttonServer
- Feld, wählen Sie zuvor erstellt docker machine für dieses Projektbleh_api
)Python interpreter path
benötigtOK
Schritt 4: konfigurieren der remote-debugger
Run
/Edit Configurations
wählen Sie+
hinzufügen einer KonfigurationPython
Script
Feld, verwenden Speicherort der Skript-Datei auf dem docker-container ausgeführt werden (in diesem Beispiel ist es/usr/bin/bleh/__main__.py
wie geben wir den absoluten Pfad zu unserem Ziel-Skript)Script parameters
Feld, Versorgung der CLI-Parameter, wenn vorhanden (ahmt dieDockerfile
's LetzteCMD
Befehl, die--cfg=/etc/bleh/config.ini
)Python Interpreter
- Feld, wählen Sie Ihre zuvor festgelegten remote-python-interpreterWorking directory
- Feld, wählen Sie das Verzeichnis, in demScript
befindet sich innerhalb des Docker-container (. e.g/usr/bin/bleh
)Path mappings
Feld, klicken Sie auf die...
und wählen Sie local (e.g/Users/myfunkyusername/Projects/bleh/api/src
) und remote (e.g/usr/bin/bleh
) wie obenDocker container settings
Feld, klicken Sie auf...
bleh_api:latest
)Dockerfile
(e.g 8080/8080 und aussetzen0.0.0.0
mit dertcp
Protokoll jetzt habe ich nicht gezeigt, was die app-Struktur ist, aber lasst uns davon ausgehen, dass Sie gesund und in der app sind auch die Angabe8080
wie der Hafen, wo Ihr ' E dienen Ihrer Daten./usr/bin/bleh
//Users/myfunkyusername/Projects/bleh/api/src
Network mode
( Dank Piotr )<name_of_project_directory>_<name_of_network_from_compose_file>
(e.gbleh_default
können Sie bestätigen Sie mitdocker network ls
aus der richtigendocker-machine
)Schritt 5: in der Sonne Aalen oder Bash Ihren Kopf etwas mehr
Diese sind die Schritte, die mich zu einer Arbeit Andockfenster und PyCharm-setup.
Ich will nicht behaupten, richtig zu sein, in jedem dieser Schritte. Gerne werde ich für Sie aktualisieren-Fehler/Verbesserungen, die Sie finden.
InformationsquelleAutor der Antwort Marc
Mit Docker 1.3, verwenden Sie die
exec
- Befehl zu konstruieren, der Pfad zu den Python-interpreter:Sehen https://docs.docker.com/reference/commandline/cli/#exec, http://forum.jetbrains.com/thread/PyCharm-2224
Könnten Sie SSH installieren in den Behälter und dann setzen Sie den port, aber das ist nicht, wie Container werden erwartet verwendet zu werden, denn wäre Sie Blähungen.
InformationsquelleAutor der Antwort dukebody
Habe ich noch nicht ausprobiert, aber ich würde versuchen, erstellen Sie ein Bash-Skript, das Aufrufe
docker exec ...
wie in @Anto die Antwort.Installieren Sie dann die BashSupport Erweiterung. Jetzt erstellen Sie eine neue run-Konfiguration läuft dein Skript als Bash-Skript.
InformationsquelleAutor der Antwort taleinat
Können Sie ein bisschen verrückt durch die Installation von pycharm in den container und läuft von dort aus. Sie müssten dies tun, indem Sie "docker run-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=:0.0 pycharm-image", aber es sollte gut funktionieren. Aber denken Sie daran, dass alle von pycharm und Ihre Quelle wäre in diesem Behälter auch. So save, commit und push) früh und Häufig.
InformationsquelleAutor der Antwort grim
Mit PyCharm 5 Sie Unterstützung für docker. Sie müssen Ihre Andockfenster konfiguriert im Andockfenster-Maschine.
Wenn Sie nicht bereits verwenden docker-Maschine Sie können eine Verbindung zu einer vorhandenen Maschine mit dem generic-Maschine-Motor-und ssh in eine vagrant VM oder localhost wenn Sie nicht laufen Dinge, die in einer VM. Ich habe nicht einen Weg finden, um den ssh auf localhost, leider.
Habe ich noch keinen Weg gefunden, mounten-volumes in das Andockfenster Bild, das Sie verwenden, um Dateien zu teilen mit meiner dev-tree, aber es könnte möglich sein.
InformationsquelleAutor der Antwort Dobes Vandermeer