2016-10-14 5 views
5

Ich bin sehr neu für Docker. Ich möchte meine Python-Anwendung in einem Andock-Container erstellen. Während ich die Anwendung erstelle, möchte ich sie in Pycharm und im Container testen/ausführen.Wie führe ich pycharm in meinem Andock-Container aus?

Wie verbinde ich Pycharm pro mit einem bestimmten Container oder Bild (entweder Python oder Anaconda)?

Wenn ich ein Projekt, klicken Sie auf reine Python erstellen und dann remote hinzufügen, dann auf Docker ich folgendes Ergebnis

enter image description here

Ich laufe auf Mac OS X El Capitan (10.11.6) erhalten mit Docker Version 1.12.1 und Pycharm Pro 2016.2.3

+0

Verwenden Sie Docker für Mac oder verwenden Sie einen Computer, den Sie über docker-machine eingerichtet haben? – programmerq

+0

@programmerq Derzeit Docker für Mac – kindjacket

+0

Wie ist der Server eingerichtet? Die Dokumentation [hier] (https://www.jetbrains.com/help/pycharm/2016.2/configuring-remote-interpreters-via-docker.html) erwähnt Docker-Maschine, die es klingt wie Sie nicht verwenden. Es gibt auch [dieses offene Problem] (https://youtrack.jetbrains.com/issue/IDEA-159223), um docker auf Mac zu unterstützen. Es gibt auch [diese mögliche Lösung] (https://youtrack.jetbrains.com/issue/IDEA-153973#comment=27-1600630). – R0MANARMY

Antwort

4

Docker-for-Mac unterstützt nur Verbindungen über den Socket /var/run/docker.sock, der auf Ihrem OSX-Host abgehört wird.

Wenn Sie versuchen, dies zu addieren PyCharm, werden Sie die folgende Meldung erhalten:

Only supported on Linux

„Verbindung nicht möglich: java.lang.ExceptionInInitializerError, verursacht durch: java.lang.IllegalStateException: Nur unterstützt unter Linux "

Also PyCharm wirklich nur über einen TCP-Socket Verbindung zu einem Andock-Daemon will, und hat Unterstützung für den empfohlenen TLS-Schutz dieses Sockets. Der Ordner Zertifikate ist standardmäßig der Zertifikatordner für den Standard-Docker-Rechner, "Standard".

Es ist möglich, eine Problemumgehung zu implementieren, um Docker für Mac über einen TCP-Server verfügbar zu machen, wenn auf Ihrem OSX-Computer socat installiert ist.

Auf meinem System habe ich es über Homebrew installiert:

socat TCP-LISTEN:2376,reuseaddr,fork,bind=127.0.0.1 UNIX-CLIENT:/var/run/docker.sock 

WARNUNG: dies möglich, sie machen für

brew install socat 

das ist nun installiert ist, kann ich socat mit den folgenden Parametern ausgeführt Jeder Prozess läuft wie jeder andere Benutzer auf Ihrem Mac, um auf Ihr Docker-for-Mac zuzugreifen. Der Unix-Socket ist durch Benutzerrechte geschützt, während 127.0.0.1 nicht geschützt ist.

Dieser Socat Befehl sagt ihm, auf 127.0.0.1:2376 zu hören und Verbindungen an /var/run/docker.sock weiterzuleiten. Die Optionen reuseaddr und fork ermöglichen, dass mit diesem einen Befehl mehrere Verbindungen anstatt nur der ersten bedient werden können.

Ich kann testen, ob socat arbeitet, indem Sie den folgenden Befehl ausführen:

docker -H tcp://127.0.0.1:2376 ps 

Wenn Sie eine erfolgreiche docker ps Antwort zurück, dann wissen Sie, dass der socat Prozess seine Arbeit tut.

Nun, im PyCharm-Fenster kann ich das gleiche tcp://127.0.0.1:2376 an Ort und Stelle setzen.Ich sollte eine „Verbindung erfolgreich“ Nachricht zurück:

connection successful

Diese Problemumgehung wird, dass socat Befehl erfordern jederzeit zu laufen Sie Docker von PyCharm verwenden möchten.

Wenn Sie dasselbe tun möchten, aber mit TLS, können Sie Zertifikate einrichten und sie sowohl für pycharm als auch für socat verfügbar machen, und verwenden Sie socats OPENSSL-LISTEN anstelle der TCP-LISTEN-Funktion. Ich werde jedoch nicht auf die Details für diese Antwort eingehen.

Verwandte Themen