Die Erfassung der Ausgabe des python-Skript laufen in einem docker-container

Ziel ist es, zu einem docker-container als sichere sandbox ausführen von nicht vertrauenswürdigen python-Skripte, sondern zu tun, so innerhalb von python unter Verwendung des andockfensters-py-Modul, und in der Lage zu erfassen Sie die Ausgabe des Skripts.

Bin ich mit einem python-Skript foo.py innerhalb eines docker-container (es ist festgelegt, wie die ENTRYPOINT Befehl in meinem Dockerfile, so dass es ausgeführt wird, sobald der container laufen) und bin nicht in der Lage zu erfassen Sie die Ausgabe des Skripts. Wenn ich den container über die normale CLI mit

docker run -v /host_dirpath:/cont_dirpath my_image

(host_dirpath wird das Verzeichnis mit foo.py) ich bekomme die erwartete Ausgabe von foo.py gedruckt auf stdout, die nur ein Wörterbuch von Schlüssel-Wert-Paare. Dennoch versuche ich, dies zu tun innerhalb von python unter Verwendung des andockfensters-py-Modul, und irgendwie die Ausgabe des Skripts wird nicht gefangen genommen von der logs Methode. Hier ist der python-code, den ich verwende:

from docker import Client

docker = Client(base_url='unix://var/run/docker.sock',
              version='1.10',
              timeout=10)

contid = docker.create_container('my_image', volumes={"/cont_dirpath":""})
docker.start(contid, binds={"/host_dirpath": {"bind": "/cont_dirpath"} })

print "Docker logs: " + str(docker.logs(contid))

Die nur Ergebnisse in "Docker logs:" nichts ist gefangen in den logs, weder stdout noch stderr (ich habe versucht, das auslösen einer Ausnahme innerhalb foo.py um dies zu testen).

Den Ergebnissen bin ich nach berechnet werden durch foo.py und derzeit sind Sie nur gedruckt auf stdout mit einem python - print - Anweisung. Wie kann ich diese in die docker-container-logs so lese ich es in python? Oder erfassen Sie diese Ausgabe einige andere Weg von außerhalb des Containers?

Jegliche Hilfe würde sehr geschätzt werden. Vielen Dank im Voraus!

EDIT:

Immer noch kein Glück mit docker-py, aber es funktioniert gut bei der Ausführung der container mit der normalen CLI mit subprocess.Popen - die Ausgabe ist in der Tat richtig gepackt stdout, wenn dies zu tun.

InformationsquelleAutor acr | 2014-05-07
Schreibe einen Kommentar